Una duda de novato en C

Iniciado por Isidro_SF, 17 Julio 2014, 21:21 PM

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

Isidro_SF

¡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!

rir3760

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:
printf("Introduce un valor para y2:");
scanf("%lf", &y2);
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:
printf("Introduce un caracter para z:");
scanf(" %c", &z);
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++.

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

Isidro_SF

¡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!