C: Terminando el progtwig presionando una tecla

En C, normalmente uso la función getch() para esperar a que se presione una tecla y luego finalizo el progtwig, pero recientemente leí que, dado que no es una función estándar, es una mala práctica de progtwigción usarla.

Así que en lugar de lo siguiente:

 int main() { dosomething(); getch(); //wait for the user to see the results and press a key to end return 0; } 

¿Qué debo hacer para reemplazar el getch ?

getc(stdin); es portatil en este sentido

El uso de una función de E / S no estándar no es una mala práctica en sí misma ; se convierte en un problema si tiene la intención de portar este código a una plataforma diferente que no sea compatible con getch() .

El problema es que no hay funciones de biblioteca estándar que detecten pulsaciones de teclas individuales ( getchar() y fgetc() están almacenadas en búfer y requieren que fgetc() tecla Intro antes de regresar); vas a tener que usar algo no estándar para hacer eso. Si solo desea que este código se ejecute en esta plataforma específica, use getch() si eso es lo que necesita y recuerde que esta solución no se aplicará necesariamente a otras plataformas. Si tiene la intención de portar este código a plataformas que no son compatibles con getch() , aísle la llamada específica del sistema detrás de una función de envoltura de modo que al portar el código, solo deba cambiar el código dentro de la función de envoltura.

 int getKeystroke(void) { /** * Put platform-specific call here */ return getch(); } int main(void) { ... // do stuff here getKeystroke(); return 0; } 

Podrías arreglar la ventana del terminal para no desaparecer.

getchar() es estándar, pero debido al búfer de línea, aún deberá presionar Enter antes de que devuelva getchar .

Prefiero ejecutar el progtwig desde la línea de comandos.

Creo que el uso de getch () es el más común, con mucho, es evitar que la ventana de la consola se cierre, pero en C ++, los progtwigdores más experimentados recomendarán que uses cin.get

  std::cin.get(); 

en lugar de:

 getch(); 

¿Estás utilizando el comstackdor Turbo C? getch() es ampliamente utilizado allí.

OTOH si desea que el progtwig espere, ejecute el binario dentro del shell / terminal / prompt. Navegue a ese directorio e invoque

Windows:

 C:> executable.exe 

Linux:

 ~$ ./exec 

Puedes usar getchar() , el único problema es que está en búfer. getch() no está almacenado en búfer. También puede hacer que getchar() no esté en búfer, pero el código para eso no vale la pena. Lo intenté una vez, pero debido a su gran complejidad nunca me molesté en intentarlo de nuevo.

Además de otras respuestas, también puede usar esto en Windows, especialmente si su intención es esperar a que se presione la tecla para finalizar el progtwig:

 system("pause"); 

Solo tratando de responder algo diferente, puedes usar

while(1) sleep(10);

al final de la función principal (antes del return 0; ) y luego puede presionar ctrl-c para finalizar el progtwig. Creo que no deberías enfrentar el problema de la portabilidad y espero que esta no sea una mala práctica de progtwigción tampoco 🙂