|
// https://stackoverflow.com/questions/22028142/read-only-one-char-from-cin
|
|
#include <iostream> // cout, cin, streambuf, hex, endl, sgetc, sbumpc
|
|
#include <iomanip> // setw, setfill
|
|
#include <fstream> // fstream
|
|
|
|
// These inclusions required to set terminal mode.
|
|
#include <termios.h> // struct termios, tcgetattr(), tcsetattr()
|
|
#include <stdio.h> // perror(), stderr, stdin, fileno()
|
|
|
|
using namespace std;
|
|
|
|
char mygetchar()
|
|
{
|
|
struct termios t;
|
|
struct termios t_saved;
|
|
|
|
// Set terminal to single character mode.
|
|
tcgetattr(fileno(stdin), &t);
|
|
t_saved = t;
|
|
t.c_lflag &= (~ICANON & ~ECHO);
|
|
t.c_cc[VTIME] = 0;
|
|
t.c_cc[VMIN] = 1;
|
|
if (tcsetattr(fileno(stdin), TCSANOW, &t) < 0) {
|
|
perror("Unable to set terminal to single character mode");
|
|
return -1;
|
|
}
|
|
|
|
// Read single characters from cin.
|
|
std::streambuf *pbuf = cin.rdbuf();
|
|
char c;
|
|
c = pbuf->sbumpc();
|
|
|
|
// Restore terminal mode.
|
|
if (tcsetattr(fileno(stdin), TCSANOW, &t_saved) < 0) {
|
|
perror("Unable to restore terminal mode");
|
|
return -1;
|
|
}
|
|
return c;
|
|
}
|