C/Visual C - Problema con funcion getchar()

 
Vista:

Problema con funcion getchar()

Publicado por Franco (6 intervenciones) el 02/03/2008 21:32:11
Buenas, estoy dando mis primeros pasos en C y me tope con un problema con la función getchar()
El hecho es que tengo que escribirla dos veces para que el programa la tome, sino la pasa de largo, por mas que busco todos los manuales, tutoriales y ejemplos la escriben una sola vez y rezan que les anda, pero a mí no...abajo pongo mi programa (si así se lo puede llamar) ;) Esta en la línea 28 y 29 dentro de la función leer_datos()

#include <stdio.h>

/*Definicion de funciones y variables*/
float num[100];
void calculo(void), leer_datos(void), mostrar(void);
int cant, i;

/*Comienzo*/
main()
{
leer_datos();
calculo();
mostrar();
printf (" FIN DEL PROGRAMA!! ");
return 0;
}

void leer_datos(void)
{
int op;

do
{
cant++; /*cuenta la cantidad de nros ingresados*/
printf (" Ingrese el nro%d: ", cant);
scanf ("%f", &num[cant]);
printf (" Otro número? s/n: " );
op = getchar(); /*Aca esta el problema*/
op = getchar();
}
while (op == 's');
}

void calculo(void)
{
for (i = 1; i <= cant; i++)
{
num[i] *= 2;
}
}

void mostrar(void)
{
for (i=1; i<=cant; i++)
{
printf (" El doble del nro%d es= %f", i, num[i]);
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con funcion getchar()

Publicado por leo (17 intervenciones) el 03/03/2008 01:25:53
Prueba poniendo fflush(NULL) arriba del getchar.
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con funcion getchar()

Publicado por franco (6 intervenciones) el 03/03/2008 01:49:09
Primero, gracias por la pronta respuesta..

Lamentablemente sigo teniendo el mismo comportamiento poniendo fflush(NULL); antes del getchar (debo duplicar la sentencia para que la tome)

Antes no aclaré que estoy bajo linux, compilando con gcc; supongo que ha de servir como dato

Alguna otra idea en qué le estoy errando?

Saludos. Franco
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con funcion getchar()

Publicado por Tom (619 intervenciones) el 03/03/2008 10:44:16
Joé, es el problema de siempre ...
Para que scanf recoja tu entrada, has de pulsar "return" ¿verdad?
Pues el último "return" es lo que lee tu primer getchar(), por eso has de hacer otro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con funcion getchar()

Publicado por Franco (6 intervenciones) el 03/03/2008 13:05:57
Hola, no comprendí, he reemplazado getchar por scanf y obtengo exactamente el mismo comportamiento; cómo hago para no tener que duplicar la sentencia?

Gracias. Franco
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con funcion getchar()

Publicado por Tom (619 intervenciones) el 04/03/2008 09:59:46
¿ Qué no comprendes exactamente ?
En la doc. de scanf, te dirá claramente que no descarga el carácter ' ' (o sea "return").
Por otra parte, getchar() lee un carácter que, tras tu última entrada por el teclado, es ' '.
¿ Sabes que existe un buffer donde se almacenan hasta que son leídos los caracteres que introduces por el teclado ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con funcion getchar()

Publicado por Franco (6 intervenciones) el 04/03/2008 18:20:37
Ok, es evidente que me falta leer aun mas; al menos por tu expresión está muy claro lo que comentas, y yo sigo sin entender por qué tengo que escribir dos veces la misma sentencia. Pensé que al recibir 'return' en el primer scanf pararía en el próximo para recibir otra entrada...todavía me resulta muy confuso el comportamiento de getchar y scanf
Como dije al principio, son mis primeros pasos (y tropiezos) en programación.

Gracias por todo! Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con funcion getchar()

Publicado por eduardo (82 intervenciones) el 04/03/2008 20:26:58
Al recibir la entrada de scanf ("%f", &num[cant]); y al pulsar Enter queda el caracter ' ' en el bufer de entrada de ahi que deberias limpiarlo usando despues de scanf() fflush( stdin ); ya que si no lo haces tu primer getchar() lo toma sin esperar a que tu ingreses 's' es por ello que estas incluyendo un segundo
getchar()
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con funcion getchar()

Publicado por Franco (6 intervenciones) el 05/03/2008 13:43:51
Hola! Gracias, me quedó más claro cuál es el problema.
Esto de poner fflush(stdin) lo probaste y te funciona? Con qué compilador? Porque a mi me sigue haciendo exactamente lo mismo, es igual que lo ponga o que no.
Hay alguna otra manera de limpiar el buffer? Será un tema de gcc?

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con funcion getchar()

Publicado por leo (17 intervenciones) el 06/03/2008 15:43:16
A ver... proba llamando a esto antes del getchar()

void cleanbuff()
{
char c = 1;
while(c != ' ') c = getchar();
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con funcion getchar()

Publicado por Franco (6 intervenciones) el 06/03/2008 19:17:54
Bien, eso que escribiste me dio la idea de ponerlo así:

do
{
op = getchar();
}
while (op == ' ');

Anda, aunque no se que tan serio será hacer un programa con esto...se me da que debe haber alguna forma que funcione sin esta chapuza...

Gracias por todo! Gran ayuda me han dado en este foro!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar