elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Esto es un error o es que lo realice mal??
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Esto es un error o es que lo realice mal??  (Leído 2,331 veces)
αиσиyмσυรCร

Desconectado Desconectado

Mensajes: 83


[αиσиyмσυร̲̅Cร̲̅]


Ver Perfil
Esto es un error o es que lo realice mal??
« en: 12 Julio 2013, 00:45 am »

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?...
Código:
#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


« Última modificación: 12 Julio 2013, 00:54 am por αиσиyмσυรCร » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Esto es un error o es que lo realice mal??
« Respuesta #1 en: 12 Julio 2013, 01:06 am »

Código
  1. #include <stdio.h>
  2.  
  3. main(){
  4.  
  5. float x, y, z;
  6. float mayor;
  7.  
  8. printf("Introduce el valor de x: ");
  9. scanf("%f", &x);
  10. printf("Introduce el valor de y: ");
  11. scanf("%f", &y);
  12. printf("Introduce el valor de z: ");
  13. scanf("%f", &z);
  14. if ((x>y)&&(x>z))
  15.   mayor=x;
  16. else if (y>z)
  17.     mayor=y;
  18.     else mayor=z;
  19.  
  20. printf("El mayor de los 3 numeros introducidos es => %f", mayor);
  21. scanf("%f", &y);
  22. }
  23.  

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)


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Esto es un error o es que lo realice mal??
« Respuesta #2 en: 12 Julio 2013, 02:30 am »

Le 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:
Código
  1. printf("Introduce el valor de x: ");
  2. 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
En línea

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


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Esto es un error o es que lo realice mal??
« Respuesta #3 en: 12 Julio 2013, 09:24 am »

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".
En línea

αиσиyмσυรCร

Desconectado Desconectado

Mensajes: 83


[αиσиyмσυร̲̅Cร̲̅]


Ver Perfil
Re: Esto es un error o es que lo realice mal??
« Respuesta #4 en: 12 Julio 2013, 09:41 am »

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:
Código:
#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
« Última modificación: 12 Julio 2013, 09:43 am por αиσиyмσυรCร » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como crear un programa que me realice inventarios con imágenes
Programación General
_vicho_ 1 3,699 Último mensaje 23 Noviembre 2011, 23:45 pm
por Littlehorse
Porque me sale error con esto? {C}
Programación C/C++
Anastacio 4 3,259 Último mensaje 16 Febrero 2012, 19:49 pm
por Anastacio
Tengo una duda al compilar mi programa me marca error en esto
.NET (C#, VB.NET, ASP)
Ivs_mx 2 3,398 Último mensaje 2 Octubre 2012, 15:52 pm
por leosansan
Requiero una persona que realice HaaS
Hacking
Oxom 0 3,199 Último mensaje 11 Mayo 2023, 11:04 am
por Oxom
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines