Progtwig C: Error al leer el carácter desde la entrada estándar usando scanf

Actualmente estoy tratando de aprender progtwigs en C simples. Pero, llegué a esta situación:

#include #include void main() { char c; int tryagain=1; while(tryagain>0){ printf("Enter the Character : "); scanf("%c",&c); printf("You entered the character \"%c\" and the ascii value is %d",c,c); getch(); clrscr(); tryagain=0; printf("You want to Trry again Press 1 : "); scanf("%d",&tryagain); clrscr(); } } 

El progtwig está bien cuando el usuario ingresa un carácter por primera vez. Y, cuando pida continuar. Y, el usuario ingresa 1 entonces se está comportando de forma remota. Ingresa automáticamente un carácter en blanco e imprime el ascii y el mismo lugar.

¿Cómo puedo resolver esto? Y, especialmente, ¿Por qué es la razón de esto?

Y, lo siento por mi pobre inglés!

Gracias de antemano.

El problema es que está leyendo un solo número en el segundo scanf, pero el usuario ingresa más de un solo número allí, el usuario también ingresa un nuevo carácter de línea presionando.

El usuario ingresa “1 \ n”. Su scanf lee “1”, omitiendo “\ n” en el flujo de entrada. Luego, el siguiente scanf que lee un carácter lee “\ n” de la secuencia.

Aquí está el código corregido. Utilizo getc para descartar el nuevo carácter de línea extra que está allí.

 #include  void main() { char c; int tryagain = 1; while (tryagain > 0) { printf("Enter a character: "); scanf("%c", &c); printf("You entered the character \"%c\" and the ascii value is %d\n", c, c); tryagain = 0; printf("If you want to try again, enter 1: "); scanf("%d", &tryagain); // get rid of the extra new line character getc(stdin); } } 

Además, como nota al margen, usa conio.h que no es parte del estándar C, es el archivo de encabezado de MS-DOS, por lo tanto, no es la C portátil que está escribiendo. Lo he eliminado de mi código, pero es posible que desee guardarlo.

Cuando usas

 scanf("%d",&tryagain); 

el número se lee en tryagain pero el carácter de nueva línea, '\n' , aún se deja en el flujo de entrada. La próxima vez que uses:

 scanf("%c",&c); 

el carácter de nueva línea se lee en el c .

Mediante el uso

 scanf("%d%*c",&tryagain); 

la nueva línea se lee desde el flujo de entrada, pero no se almacena en ninguna parte. Simplemente se desecha.