Pregunta sobre condicionales y booleanos.

Iniciado por DeIMachine, 8 Noviembre 2015, 19:15 PM

0 Miembros y 1 Visitante están viendo este tema.

DeIMachine

Hola de nuevo, tengo este problema que vuelve a ser bastante fácil:
https://gyazo.com/01dd2521958d2b9b17f32817fbbbae28

Mi problema es que en la función de la variable booleana si pongo un numero negativo no soy capaz de hacer ningun cout. Por ejemplo si pongo que las horas=-1
se me acaba el programa y no me dice nada aunque yo dentro del codigo haya puesto que me imprima en pantalla algo:
Código (cpp) [Seleccionar]

bool verificado(int h, int m, int seg, int milesima){
    if(h<0){
        cout<<"Error semantico: las horas no pueden ser negativas"<<endl;
        return false;
    }
}

La tradición es la mortaja de la sabiduría.

ivancea96

En la misma función, haz un cout antes del if, para comprobar si h es el número correcto.

DeIMachine

Hago un cout<<h; para que me diga que numero habia escrito como h y siempre me devuelve 1 x), no le encuentro el sentido.
La tradición es la mortaja de la sabiduría.

ivancea96

Bien, entonces sabes una cosa, y es que llemas a la función enviándole un 1 como primer parámetro. Eso significa que el problema viene de antes. Revisa dónde la llamas, y revisa si a la variable que le pasas como parámetro le asignas el valor correctamente.

DeIMachine

He ido recortando el codigo y todavia no he encontrado la respuesta, ahora en vez de cambiarme ha  1 me lo cambia a 0 exactamente con esto.
Lo estoy repasando y repasando pero es que no hay nada, ya me estoy desquiciando jajaj, el programa empieza con la funcion void leer recibe la variable h, despues de obtenerla la imprimo en el main y me pone que es 0, es que no se que se me pasa por alto si realmente es muy pequeño el codigo y no toco na.
Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

void leer(int h){
    cin >> h;
   
}





int main(){
    int h;
    leer(h);
    cout<<h;
   
    return 0;
}   
La tradición es la mortaja de la sabiduría.

DeIMachine

De hecho si pregunto el valor de h en void leer me lo da bien pero al pasar a la main cambia automaticamente a 1.
La tradición es la mortaja de la sabiduría.

ivancea96

Cita de: DeIMachine en  8 Noviembre 2015, 20:01 PM
He ido recortando el codigo y todavia no he encontrado la respuesta, ahora en vez de cambiarme ha  1 me lo cambia a 0 exactamente con esto.
Lo estoy repasando y repasando pero es que no hay nada, ya me estoy desquiciando jajaj, el programa empieza con la funcion void leer recibe la variable h, despues de obtenerla la imprimo en el main y me pone que es 0, es que no se que se me pasa por alto si realmente es muy pequeño el codigo y no toco na.
Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

void leer(int h){
    cin >> h;
   
}





int main(){
    int h;
    leer(h);
    cout<<h;
   
    return 0;
}   


Bien,ahí el problema es que le pasas el valor de la variable h a la función. Pero si la función modifica su propia variable h, esa modificación no va a afectar a fuera de la función. Coloca:

Código (cpp) [Seleccionar]

void leer(int* h){
    cin >> h;
}
...
leer(&h);

o
Código (cpp) [Seleccionar]

void leer(int& h){
    cin >> h;
}
...
leer(h);


De estas maneras, le pasas una referencia a tu variable "h" de main, así la función puede modificar <tu> variable, y no su variable. El tema de punteros y memoria ya lo verás si no lo viste aun.

DeIMachine

Una vez más gracias, soy un poco tonto y en la main que nos daban venían declarados ya los punteros pero yo lo hice aparte y la lié porque aun no los había dado.
La tradición es la mortaja de la sabiduría.