El enunciado del ejercicio es este:
Crear un programa que use tres variables x,y,z. Las tres serán números reales, y nos
bastará con dos cifras decimales. Deberá pedir al usuario los valores para las tres
variables y mostrar en pantalla cual es el mayor de los tres números tecleados.
Yo hice este código y ahora mostrare que pasa cuando lo pruebo ¿eso debería ser así?¿Que tengo mal?...
#include <stdio.h>
main(){
float x, y, z;
float mayor;
printf("Introduce el valor de x: ");
getchar();
scanf("%f", &x);
getchar();
printf("Introduce el valor de y: ");
getchar();
scanf("%f", &y);
getchar();
printf("Introduce el valor de z: ");
getchar();
scanf("%f", &z);
getchar();
if ((x>y)&&(x>z))
mayor=x;
else if (y>z)
mayor=y;
else mayor=z;
printf("El mayor de los 3 numeros introducidos es => %f", mayor);
getchar();
}
http://gyazo.com/8365c6a48c13ed575eb620db2850c7e2
Me podéis ayudar un saludo y gracias de antemano :D
#include <stdio.h>
main(){
float x, y, z;
float mayor;
printf("Introduce el valor de x: ");
scanf("%f", &x);
printf("Introduce el valor de y: ");
scanf("%f", &y);
printf("Introduce el valor de z: ");
scanf("%f", &z);
if ((x>y)&&(x>z))
mayor=x;
else if (y>z)
mayor=y;
else mayor=z;
printf("El mayor de los 3 numeros introducidos es => %f", mayor);
scanf("%f", &y);
}
Le quité los getchar() y le puse al final un scanf(). Parece que el getchar daba algun problema :o
(El scanf del final, ponle lo que sea, es solo para detener el programa)
Cita de: ivancea96 en 12 Julio 2013, 01:06 AMLe quité los getchar() y le puse al final un scanf(). Parece que el getchar daba algun problema
Cierto. La causa del error son las llamadas a getchar:
printf("Introduce el valor de x: ");
getchar();
scanf("%f", &x);
Por ejemplo si se introduce "123.456" getchar lee y descarta el primer carácter (el '1'), scanf procesa los restantes almacenando el valor 23.456 en la variable "x", de ahí los resultados incorrectos.
Un saludo
es que getchar solo lee un caracter... si tu introduces 1234.56 por teclado, el buffer de entrada va a contener una cadena de caracteres tal que "1234.56"... luego ya es responsabilidad tuya, mediante una función de la librería estándar o mediante una función propia, convertir esa cadena de texto en un número.
Con lo comentado, si tu introduces 1234.56 y sólo pones un getchar, el getchar va a leer un único carácter, el primero que le llegue más concretamente, que será el "1" ( ojo, no un uno numérico, sino el carácter que representa al número 1 ), y dejará en el buffer de entrada el resto, "234.56".
Ok ya lo entendí y se corrigió pero ya que estamos yo ponía los getchar(); para que se viera lo que introducía no sabia que podía dar esos errores.
Al final deje así el código y funciona perfectamente:
#include <stdio.h>
main(){
float x, y, z;
float mayor;
printf("Introduce el valor de x: ");
scanf("%f", &x);
printf("Introduce el valor de y: ");
scanf("%f", &y);
printf("Introduce el valor de z: ");
scanf("%f", &z);
if ((x>y)&&(x>z))
mayor=x;
else if (y>z)
mayor=y;
else mayor=z;
printf("El mayor de los 3 numeros introducidos es => %f", mayor);
getchar();
getchar();
}
Con el doble getchar me dejo de tener que añadir otro valor como hacia con scanf y se para :) y hay no le afecta a nada en especial ya que el programa hace la función que debe realizar correctamente.
Gracias por vuestra ayuda :D