¿Espera a presionar enter en C dentro de un bucle while?

Estoy escribiendo un progtwig en C y debo esperar a que el usuario presione cualquier tecla para continuar. Cuando uso getchar(); espera a que se pulse la tecla Intro . Pero cuando lo uso dentro de un bucle while, no funciona. ¿Cómo puedo hacer que mi código espere a que se presione alguna tecla para continuar el ciclo?

Aquí está mi ejemplo de código. Estoy usando GNU / Linux.

 #include  #include int main() { int choice; while(1) { printf("1.Create Train\n"); printf("2.Display Train\n"); printf("3.Insert Bogie into Train\n"); printf("4.Remove Bogie from Train\n"); printf("5.Search Bogie into Train\n"); printf("6.Reverse the Train\n"); printf("7.Exit"); printf("\nEnter Your choice : "); fflush(stdin); scanf("%d",&choice); switch(choice) { case 1: printf("Train Created."); break; case 2: printf("Train Displayed."); break; case 7: exit(1); default: printf("Invalid Input!!!\n"); } printf("Press [Enter] key to continue.\n"); getchar(); } return 0; } 

Si este código (con fflush adicional)

 #include  #include  int main() { int choice; while(1){ printf("1.Create Train\n"); // print other options printf("\nEnter Your choice : "); fflush(stdin); scanf("%d", &choice); // do something with choice // ... // ask for ENTER key printf("Press [Enter] key to continue.\n"); fflush(stdin); // option ONE to clean stdin getchar(); // wait for ENTER } return 0; } 

no funciona correctamente

Prueba este código (con bucle):

 #include  #include  int main() { int choice; while(1){ printf("1.Create Train\n"); // print other options printf("\nEnter Your choice : "); fflush(stdin); scanf("%d", &choice); // do something with choice // ... // ask for ENTER key printf("Press [Enter] key to continue.\n"); while(getchar()!='\n'); // option TWO to clean stdin getchar(); // wait for ENTER } return 0; } 

Su respuesta de por qué fflush (stdin) no funcionará, la puede encontrar aquí:

¿Cómo borrar el búfer de entrada en C?

http://c-faq.com/stdio/stdinflush.html

Espero que esto ayude.

getchar() leerá la tecla de entrada presionada por usted después de ingresar su elección. En este caso, la tecla Enter Enter ASCII 13 se lee mediante getchar()

Por lo tanto, debe borrar el búfer de entrada o puede usar otras alternativas.

Alternativa 1: usar getchar() dos veces

 { getchar(); // This will store the enter key getchar(); //This will get the character you press..hence wait for the key press }