Tengo el siguiente programa:
int main(int argc, char *argv[])
{
char ch1, ch2;
printf("Input the first character:"); // Line 1
scanf("%c", &ch1);
printf("Input the second character:"); // Line 2
ch2 = getchar();
printf("ch1=%c, ASCII code = %d\n", ch1, ch1);
printf("ch2=%c, ASCII code = %d\n", ch2, ch2);
system("PAUSE");
return 0;
}
Como ha explicado el autor del código anterior: El programa no funcionará correctamente porque en la Línea 1, cuando el usuario presione Enter, dejará en el búfer de entrada 2 el carácter: Enter key (ASCII code 13)y \n (ASCII code 10). Por lo tanto, en la Línea 2, leerá el \ny no esperará a que el usuario ingrese un carácter.
OK, tengo esto. Pero mi primera pregunta es: ¿Por qué el segundo getchar()( ch2 = getchar();) no lee el carácter Enter key (13), en lugar de \n?
A continuación, el autor propuso 2 formas de resolver tales problemas:
utilizar
fflush()escribe una función como esta:
void clear (void) { while ( getchar() != '\n' ); }
Este código funcionó realmente. ¿Pero no puedo explicarme cómo funciona? Porque en la declaración while, usamos getchar() != '\n', eso significa leer cualquier carácter excepto '\n'? si es así, en el búfer de entrada aún permanece el '\n'carácter?