Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Novato en C

Estas en el tema de Novato en C en el foro de C/C++ en Foros del Web. Buenos días. Soy novato en esto de la programación y estoy probando cosas para ver como funciona esto. Adjunto el código de un programa de ...
  #1 (permalink)  
Antiguo 22/09/2009, 02:49
 
Fecha de Ingreso: junio-2007
Mensajes: 53
Antigüedad: 16 años, 10 meses
Puntos: 0
Novato en C

Buenos días.

Soy novato en esto de la programación y estoy probando cosas para ver como funciona esto. Adjunto el código de un programa de prueba, en el que tengo la duda de como está evaluando estos tipos de variables en la condicion if.
Aunque sintacticamente no me da ningun error en el compilador, creo que semanticamente no es correcta y por lo tanto nunca se cumplira la condición.
Esto es debido a que uso un operando booleano con datos enteros, creo¿Estoy en lo cierto?
int main()
{
typedef enum {FALSE, TRUE} bool;
int a,b,c;
bool ordenadas;
a=1;
b=2;
c=3;
ordenadas=TRUE;
if (ordenadas == a>b>c)
{
printf("Es cierta la condición \n");
}
else
{
printf("No es cierta la condición \n");
}
system ("PAUSE");
return 0;
}
  #2 (permalink)  
Antiguo 22/09/2009, 05:20
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Novato en C

No hay operador booleano en C, por eso definis un tipo enumerado (FALSE es 0 y TRUE es 1). Solo podes hacer una comparacion a la vez:

Código:
if (ordenadas == ((a > b) && (b > c)) )
Y simplificado:
Código:
if ((a > b) && (b > c))
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 22/09/2009, 06:55
 
Fecha de Ingreso: junio-2007
Mensajes: 53
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Novato en C

Gracias Eternal Idol pero sigo sin entender porque el copmilador no muetra error al compilar puesto que solo permite tener dos operandos y no tres como trato de meter despues del igual. Entiendo que una vez puestos los parentesis el código se va a resolver de adentro a hacia fuera. Y por eso ya si funciona
  #4 (permalink)  
Antiguo 22/09/2009, 07:49
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Novato en C

En realidad el codigo es valido lo que pasa es que a > b devuelve 1 cuando es verdadero y 0 cuando es falso, entonces solo cuando c sea 0 la condicion completa se cumpliria (siempre que a fuera mayor a b claro).

Es decir:
a > b > c
(a>b) > c
0/1 > c

Igual asumo que lo que vos queres comprobar es que a sea mayor que b y que b sea mayor que c, eso es otra cosa.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:10.