Esto es un error o es que lo realice mal??

Iniciado por αиσиyмσυรCร, 12 Julio 2013, 00:45 AM

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

αиσиyмσυรCร

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

ivancea96

Código (cpp) [Seleccionar]

#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)

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

eferion

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".

αиσиyмσυรCร

#4
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