Intenté escribir un progtwig fácil que compara 3 números e imprime el mayor de ellos, pero sigue imprimiendo los 3 y no entiendo por qué. Ese es mi código:
#include int main() { int x = 10; int y = 8; int z = 3; if((x > y) && (x > z)); { printf("%d",x); } if((y > x) && (y > z)); { printf("%d",y); } if((z > x) && (z > y)); { printf("%d",z); } return 0; }
¡Gracias por la ayuda!
Elimine el punto y coma al final de cada instrucción if. Eso hace que la instrucción if ejecute la instrucción nula (;) y luego ejecute una instrucción de locking {printf (…); }
#include int main() { int x = 10; int y = 8; int z = 3; if((x > y) && (x > z)) { printf("%d",x); } if((y > x) && (y > z)) { printf("%d",y); } if((z > x) && (z > y)) { printf("%d",z); } return 0; }
Debería usar else, debería eliminar los puntos y coma después de las instrucciones if, los puntos y coma después de ifs significa que el cuerpo de if está vacío y el rest es un bloque de código normal
#include int main() { int x = 10; int y = 8; int z = 3; if((x > y) && (x > z)) { printf("%d",x); } else { // Will not make difference in this particular case as your conditions cannot overlap if((y > x) && (y > z)) { printf("%d",y); } else { // Will not make difference in this particular case as your conditions cannot overlap if((z > x) && (z > y)) { printf("%d",z); } } } return 0; }
Tienes un punto y coma después de tu condición if
:
if((x > y) && (x > z));
El punto y coma toma el lugar del bloque o la instrucción que se ejecutará cuando la condición sea verdadera. Es como si hubieras escrito:
if((x > y) && (x > z)) { ; } { printf("%d",x); }
Esperemos que pueda ver cómo esto ejecutará la statement de impresión incondicionalmente.
La respuesta a su pregunta se basa únicamente en el conocimiento del uso de punto y coma en C y la syntax de la instrucción if
.
Para obtener más información, lea el punto y coma y comprenda claramente la syntax de if
.
La lógica es más simple si usa una variable adicional para el máximo
#include int main() { int x,y,z, max; scanf ("%d", &x); max = x; scanf ("%d", &y); if (y > max) max = y; scanf ("%d", &z); if (z > max) max = z; printf ("max = %d", max); return 0; }