Intercettare tasto invio in C++
Ho un programma in C++ che si avvia e rimane attivo in attesa di connessioni con un ciclo infinito.
Voglio poterlo terminare usando il semplice tasto ENTER / INVIO.
Vediamo come fare sia in Visual C++ (quindi una versione per Windows), sia in C++ usando Ncurses (che gira quindi su Linux).
Visto che la versione VC++ è più semplice partiamo da qua.
Per controllare la pressione dei tasti su Windows dobbiamo usare la libreria conio.h.
Quindi includiamola e poi nel main:
#include // TUTTO QUELLO CHE VI SERVE
................
#include <conio.h>int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
// LANCIO PROGRAMMA CON CICLO INFINITO
if(_getch() == 13)
{
// ESCO DAL PROGRAMMA
}
return 0;
}
La funzione _getch() controlla il carattere premuto; nella tabella ASCII il 13 corrisponde ad ENTER.
Se viene premuto esco dal programma.
Per Linux invece dobbiamo agire in maniera diversa in quanto conio.h è una libreria specifica Microsoft.
Ci sono vari porting per Linux, ma da quanto ho capito si basano anche su Ncurses.
Quindi io ho usato direttamente questa libreria.
Per programmare con questa libreria bisogna prima installare i pacchetti devel; su Opensuse:
# zypper install ncurses-devel
Questo pacchetto non è richieso per l'esecuzione, ma è comunque richiesto ncurses.