Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Isidro_SF en 17 Julio 2014, 21:21 pm



Título: Una duda de novato en C
Publicado por: Isidro_SF en 17 Julio 2014, 21:21 pm
¡Buenas! Mi nombre es Isidro y  resulta que cuando pasen las vacaciones empezaré la carrera de informática y aunque ya hace un año que empecé a investigar lenguajes de programación y tal, ahora es cuando estoy trabajando "en serio" con el objetivo de aprender y así al menos empiezo a entrar en el mundillo y me será más fácil luego la asignatura de programación en la universidad. Estoy con el lenguaje C que bueno es muy recomendado para empezar y tal y he empezado con este lenguaje. Estoy con este problema que es de los más básicos:

3.- Escribe un programa que lea desde teclado cuatro datos de tipo char, int, float, double y
los muestre en pantalla.

El programa que yo he escrito es:


#include <stdio.h>
#include <stdlib.h>

int main (){
int x;
float y;
double y2;
char z;



printf ("Introduce un valor para x, numero entero: ");
scanf ("%i",&x);
printf("El valor de x es:%i.\n",x);


printf ("Introduce un valor para y, numero decimal:");
scanf("%f",&y);
printf("El valor de y es:%f.\n",y);


printf ("Introduce un valor para y2:");
scanf ("%f",&y2);
printf("El valor de f es: %f. \n",y2);


printf ("Introduce un caracter para z :");
scanf("%c",&z);
printf("El valor de z es: %c. \n",z);




system ("pause");
return 0;



}


Cuando lo ejecuto va bien hasta que me pide el carácter y el valor para y2; en el carácter ni siquiera puedo escribir nada y cuando me pide el valor de y2 sale 0.00000 y no entiendo por qué.

Seguro que alguien puede resolverme esta duda no se donde está el fallo , por favor si alguien puede ayudarme se lo agradecería!


Título: Re: Una duda de novato en C
Publicado por: rir3760 en 18 Julio 2014, 02:32 am
Los errores en el programa son dos.

1) Para leer con scanf un numero de punto flotante y almacenarlo en una variable de tipo double debes utilizar el especificador "%lf", de esta forma:
Código
  1. printf("Introduce un valor para y2:");
  2. scanf("%lf", &y2);
  3. printf("El valor de f es: %f\n", y2);

2) Cuando scanf se utiliza para leer un carácter ella retorna el primero que encuentra en el bufer de la entrada estándar y en tu caso es el '\n' o avance de linea de (valga la redundancia) la linea anterior. Para descartar ese carácter y leer el siguiente debes utilizar:
Código
  1. printf("Introduce un caracter para z:");
  2. scanf(" %c", &z);
  3. printf("El valor de z es: %c\n",z);

Y por favor la próxima vez que tengas una duda o problema con un programa en lenguaje C utiliza el foro apropiado: Programación C/C++ (http://foro.elhacker.net/programacion_cc-b49.0/).

Un saludo


Título: Re: Una duda de novato en C
Publicado por: Isidro_SF en 18 Julio 2014, 09:54 am
¡Muchas gracias! Ha ido perfectamente te lo agradezco. No sabía que se pusieran ahí las dudas de C pero bueno lo siento jajajajaj Para la próxima ya se a donde ir, gracias de nuevo, un saludo!