getch() è una funzione che restituisce un carattere ricevuto in input: è abbastanza comoda, ma non troppo portabile. Ho trovato questa reimplementazione in giro su Internet, e funziona. Con un po’ di accortezza, e usando una semplice direttiva di pre-processore, si può anche evitare di fare dei controlli di conformità nel momento in cui servirebbe usarla. Questo pezzetto di codice è tanto più importante se si pensa l’unica alternativa praticabile sarebbe quella di scrivere un’applicazione usando la libreria curses, che la prevede - ma solo all’interno di un programma che ne faccia uso interamente.

#include <stdio .h>
#include <unistd .h>
#include <termios .h>

#define getch() unix_getch()

int unix_getch()
{
	struct termios oldt,newt;
	int ch;

	tcgetattr( STDIN_FILENO, &oldt );

	newt = oldt;
	newt.c_lflag &= ~( ICANON | ECHO );

	tcsetattr( STDIN_FILENO, TCSANOW, &newt );

	ch = getchar();
	tcsetattr( STDIN_FILENO, TCSANOW, &oldt );

	return ch;
}

[da qui]