Io userei le ncurses. Mettono a disposizione delle funzioni come getch, che ricevono in input un carattere in maniera interattiva (senza cioe' aspettare la pressione di invio o altri tasti), e permettono di non visualizzare il carattere premuto.