我的问题是,当我的用户在终端推送制表时,我想做一件特别的事情。我的第一个代码解释了:
char buffer[100];
while (true)
{
std::cin.getline(buffer, 100); // do IMMEDIATELY something if 'tabulation' was used ?
}
所以我问自己如何检查每个字符?我试过 _getch();
while (true)
{
c = _getch();
if (c == '\t')
// do something special
else
std::cout << (char)c;
}
但是现在,我不能使用任何特殊功能键作为箭头,del,suppr等...我不能 移动 到我输入的内容中尽可能地使用getline()
那么有什么解决方案可以在getline()
的中间进行特殊中断吗?
或者是否可以以不同的方式使用_getch()
?
我还尝试做另一个线程(一个用getline()
,另一个用_getch()
来检查每个线程但是我不太确定我能用线程做什么。
可以手动处理每个特殊功能(箭头键,del,suppr等),但我正在寻找另一种解决方案。
答案 0 :(得分:1)
假设您的意思是Microsoft C运行时库中的_getch()函数:
_getch 和 _getwch 函数从中读取单个字符 控制台没有回应角色。这些功能都不是 用于读取CTRL + C.每次读取功能键或箭头键时 函数必须被调用两次;第一个调用返回0或0xE0,和 第二个调用返回实际的密钥代码。
因此,如果_getch()
返回0或0xE0(224),则您必须再次调用函数以查看按下了哪个特定键。
至少在我的机器上,这些“扩展”字符代码如下(十进制):
关于使用这些代码做的内容,请查看SetConsoleCursorPosition及相关的控制台API函数。