我为程序编写了一个 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为什么我的解决方案不起作用?
谢谢