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.
Dopo di che in fase di lancio dobbiamo linkare due librerie; quindi aggiungete due parametri (io li ho impostati direttamente nell'IDE):
-lncurses -ltinfo
A questo punto vediamo il main:
#include <cstdlib>
#include <iostream>
#include <ncurses.h>int main(int argc, char** argv) {
(void) initscr(); // INIZIALIZZA NCURSES
keypad(stdscr, TRUE); // ABILITA MAPPATURA TASTIERA
(void) nonl(); // NON CONVERTE NL->CR/NL IN OUTPUT
(void) cbreak(); // PRENDE I CARATTERI IN INPUT UNO ALLA VOLTA SENZA ATTENDERE
(void) noecho(); // NESSUN ECHO DA INPUT
for (;;) {
int c = getch();
if (c == 13) {
endwin();
exit(0);
}
}
}
Semplice main di esempio.
Come vedete includo la libreria ncurses.h.
Poi le righe sono commentate e non richiedono ulteriori spiegazioni.
Poi ciclo for infinito fino a che non viene premuto il tasto ENTER.
Diciamo che bene o male le due versioni sono simili.
Enjoy!!
linux windows vc++ c++ c++ conio ncurses as
Commentami!