我为程序编写了一个 getch 函数。我不能使用诅咒,因为它破坏了iostream
我已经使用的终端。编码:
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
我知道使用而不是系统调用会更好。一切正常,除了 if ESC
key
。我正在尝试捕获例如字符串的箭头"\1B[A"
。当我检测到ESC
第一个字符时,我还阅读了后两个以获取完整的密钥代码。问题是当我按下它时它不应该发生,ESC
因为它的代码是 1B 单独的。cin.get()
应该在return EOF
读取期间缓冲区为空时,但它只是停止。
有没有办法在不使用诅咒的情况下读取ESC
密钥?linux
为什么我的解决方案不起作用?
谢谢