プログラムの getch 関数を書きました。iostream
すでに使用している端末が壊れるため、curses を使用できませんでした。コード:
inline std::string getch() {
char inp[4];
system("stty raw");
inp[0] = std::cin.get();
if(inp[0] == 27 && (inp[1] = std::cin.get()) != std::char_traits<char>::eof()) {
std::cin>>inp[2];
inp[3] = '\0';
}
else {
inp[1] = '\0';
}
system("stty cooked echo");
return std::string(inp);
}
termios.h
システムコールの代わりに使用する方が良いことはわかっています。の場合を除いて、すべて正常に動作しESC
key
ます。たとえば の文字列である矢印をキャプチャしようとしています"\1B[A"
。最初の文字として検出するESC
と、2 番目の 2 文字も読み取って完全なキー コードを取得します。ESC
問題は、コードが 1B だけであるため、押しても発生しないはずです。読み取り中にバッファーが空の場合は、単に停止する必要cin.get()
があります。return EOF
呪いを使わずにESC
キーオンを読む方法はありますか? linux
ソリューションが機能しないのはなぜですか?
ありがとう