Call fflush(stdin);
después de scanf
para descartar los caracteres innecesarios (como \ r \ n) de memoria intermedia de entrada que fueron dejados por scanf
.
Editar: Como los chicos en los comentarios mencionados fflush
solución podría tener un problema de portabilidad, así que aquí está mi segunda propuesta. No use scanf
en absoluto y realice este trabajo utilizando la combinación de fgets
y sscanf
. Este es un enfoque mucho más seguro y simple, porque permite manejar situaciones de entrada incorrectas.
int x,y;
char c;
char buffer[80];
printf("x:\n");
if (NULL == fgets(buffer, 80, stdin) || 1 != sscanf(buffer, "%d", &x))
{
printf("wrong input");
}
printf("y:\n");
if (NULL == fgets(buffer, 80, stdin) || 1 != sscanf(buffer, "%d", &y))
{
printf("wrong input");
}
c = getchar();
'getchar()' devuelve 'int', no' char'. – unwind
@unwind - "Devuelve el siguiente carácter de la entrada estándar (stdin)." - ascii para char – Yakov