Saltar al contenido

Función “Presione cualquier tecla para continuar” en C

Nuestros investigadores estrellas han agotado sus provisiones de café, investigando todo el tiempo por la respuesta, hasta que Manuel encontró la contestación en Gogs y ahora la compartimos con nosotros.

Solución:

Utilice la función de biblioteca estándar de C getchar() en lugar de getch() no es una función estándar, y la proporciona Borland TURBO C solo para MS-DOS / Windows.

printf("Let the Battle Begin!n");
printf("Press Any Key to Continuen");  
getchar();    
 

Aquí, getchar() espera que presione el retorno key entonces el printf la declaración debe ser press ENTER to continue. Incluso si presionas a otro key, aún necesita presionar ENTER:

printf("Let the Battle Begin!n");
printf("Press ENTER key to Continuen");  
getchar();    

Si está utilizando Windows, puede utilizar getch()

printf("Let the Battle Begin!n");
printf("Press Any Key to Continuen");
getch();   
//if you press any character it will continue ,  
//but this is not a standard c function.

char ch;
printf("Let the Battle Begin!n");
printf("Press ENTER key to Continuen");    
//here also if you press any other key will wait till pressing ENTER
scanf("%c",&ch); //works as getchar() but here extra variable is required.      

No dice qué sistema está usando, pero como ya tiene algunas respuestas que pueden o no funcionar para Windows, responderé para los sistemas POSIX.

En POSIX, la entrada del teclado viene a través de algo llamado interfaz de terminal, que por defecto almacena en búfer las líneas de entrada hasta que se pulsa Retorno / Intro, para tratar correctamente el retroceso. Puede cambiar eso con la llamada tcsetattr:

#include 

struct termios info;
tcgetattr(0, &info);          /* get current terminal attirbutes; 0 is the file descriptor for stdin */
info.c_lflag &= ~ICANON;      /* disable canonical mode */
info.c_cc[VMIN] = 1;          /* wait until at least one keystroke available */
info.c_cc[VTIME] = 0;         /* no timeout */
tcsetattr(0, TCSANOW, &info); /* set immediately */

Ahora, cuando leas de stdin (con getchar(), o de cualquier otra forma), devolverá los caracteres inmediatamente, sin esperar un Retorno / Intro. Además, el retroceso ya no ‘funcionará’; en lugar de borrar el último carácter, leerá un carácter de retroceso real en la entrada.

Además, querrá asegurarse de restaurar el modo canónico antes de que salga su programa, o el manejo no canónico puede causar efectos extraños con su shell o con quien haya invocado su programa.

Usar getch():

printf("Let the Battle Begin!n");
printf("Press Any Key to Continuen");
getch();

La alternativa de Windows debería ser _getch ().

Si está usando Windows, este debería ser el ejemplo completo:

#include 
#include 

int main( void )

    printf("Let the Battle Begin!n");
    printf("Press Any Key to Continuen");
    _getch();

PD, como señaló @ Rörd, si está en el sistema POSIX, debe asegurarse de que la biblioteca de curses esté configurada correctamente.

Te mostramos comentarios y puntuaciones

Finalizando este artículo puedes encontrar las notas de otros usuarios, tú asimismo puedes dejar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *