C/Visual C - algo raro con el scanf de C

 
Vista:

algo raro con el scanf de C

Publicado por Rafa (14 intervenciones) el 01/12/2002 22:40:24
Hola, estoy haciendo un programilla en C y me he encontrado con una cosa un tanto rara al leer caracter desde teclado mediante la instrucción "scanf". Resulta que escribiendo el siguiente código elemental en C:

#include<stdio.h>
main()
{
char c = '0';
do {
printf(“di algo...”);
scanf(“%c”,&c);

switch(c)
{
case '1': printf(“has metido el uno\n”);
break;
case 'm': printf(“has metido la m\n”);
break;
}
} while (“c != 's');
}

leo un caracter que intruduzco desde el teclado, y a continuación, en vez de pedirme nuevamente que introduzca un nuevo caracter el bucle "pega otra vuelta" leyendo el caracter retorno de carro. Del bucle sé que no es problem ya que he probado sin él y me pasa más de lo mismo. Vamos que lo que sale es lo siguiente:

di algo...1
has metido el uno
di algodi algo

Véis a qué me refiero? el bucle pega otra vuelta y al pasar por la función "scanf" en vez de pedirme que lea un valor se podría decir que pasa de ello y sigue (lógicamente sin ningún valor).

Os agradecería toda ayuda que me podáis ofrecer.
Un saludo y gracias.
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:algo raro con el scanf de C

Publicado por El Mogur (202 intervenciones) el 02/12/2002 01:06:10
Prueba a poner fflush(stdin); después del scanf. Eso vacía el bucle de entrada, para que la vez siguiente que se ejecute el scanf, no aparezca el retorno de carro. Al menos en teoría.
De todas formas, para evitar los problemas con el scanf(), cuando quieres leer un solo caracter, puedes utilizar getch().

Espero que te sirva.
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:algo raro con el scanf de C

Publicado por Rafa (14 intervenciones) el 03/12/2002 14:00:35
Gracias por tu ayuda Mogur, lo he hecho como tu me has dicho pero me sigue haciendo lo mismo. He probado también con getch() y getchar y na de na. En fin, seguiré probando a ver.

Gracias por todo.
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:algo raro con el scanf de C

Publicado por El Mogur (202 intervenciones) el 04/12/2002 00:35:15
¿No te funciona?

He compilado tu código, añadiendo la línea "fflush(stdin);" después de la línea "scanf("%c", c);", y a mí no me pone 'di algo...' de más.

En vez de eso, puedes cambiar la linea "scanf(...)" por "c = getch();" (en conio.h), y funciona igual, pero no escribe por pantalla el caracter que ha tecleado.

Suerte!

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:algo raro con el scanf de C

Publicado por Rafa (14 intervenciones) el 04/12/2002 03:52:30
Que va tio, de veras que lo he recompilado y na de na, he optado hasta por reservar memoria en cada vuelta con malloc, pero ni por esas. Otra cosa, no puedo utilizar la libreria conio.h ya que lo estoy implementando desde Linux y no dispongo de ella. Quizás eso tenga algo que ver.

Un saludo y gracias nuevamente.
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