‘printf’ seguido de ‘scanf’ requiere presionar la tecla ENTER dos veces para aceptar la entrada

Soy un principiante completo en la progtwigción de C y tengo una pregunta. Traeré un código simple como ejemplo:

#include  int main( void ) { int x; printf( "Please type the number 10." ); scanf( "%i\n", &x ); if ( x == 10 ) printf( "Thank you!\n" ); return 0; } 

Como se esperaba, cuando compilo y ejecuto este progtwig, mi terminal muestra el mensaje:

 "Please type the number 10." 

Luego espera la entrada, así que escribo el número que solicita (10) y presiono ENTER . El problema es que después de presionar ENTER una vez, se mueve a una nueva línea y espera más entrada. Solo después de escribir 10 y presionar ENTER de nuevo, realmente continúa (… para mostrar “¡Gracias!”).

Así que parece que tengo que presionar ENTER dos veces para que se acepte mi entrada. ¿Alguien sabe por qué pasa esto?

En realidad, scanf no emite avisos y si incluye algo que no sea el especificador de formato, debe ingresar la entrada de manera inexacta, por eso debe presionar ENTER nuevamente.

Cambia esto :

 scanf( "%i\n", &x ); // ^ // | remove extra \n 

a esto:

 scanf( "%i", &x ); 

Es el “\ n” en su llamada a scanf . Elimine eso y scanf regresará después de escanear el valor entero que solicitó.

Nota: Esto no tiene nada que ver con el hecho de que la llamada a scanf está precedida por un printf .