如何使用_getch()的键盘函数,就像getline()一样

How to use keyboards function with _getch(), as it is possible with getline()?

本文关键字:就像 一样 getline 函数 何使用 getch 键盘      更新时间:2023-10-16

我的问题是,当我的用户在终端中推送制表时,我想做一件特殊的事情。我的第一个代码解释了:

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,支持等…我不能移动到我输入的内容,因为我可以用getline()

那么有什么解决方案可以在getline()的中间做一个特殊的中断吗?或者是否有可能以不同的方式使用_getch() ?我还试图做另一个线程(一个与getline()_getch()检查每一个),但我不太确定我可以用线程做什么。

它可以处理每一个特殊的功能(箭头键,del,支持,等等…)"手动",但我正在寻找另一个解决方案。

假设您指的是Microsoft C运行时库中的_getch()函数:

_getch_getwch函数从控制台,不回显字符。这些函数都不能用于读取CTRL+C。当读取功能键或箭头键时,每个函数必须被调用两次;第一次调用返回0或0xE0,并且第二次调用返回实际的键代码。

因此,如果_getch()返回0或0xE0(224),则必须再次调用函数以查看按下的特定键。

至少在我的机器上,这些"扩展"字符代码如下(十进制):

  • 0 59 = f1
  • 0 60 = f2
  • 0 61 = f3
  • 0 62 = f4
  • 0 63 = f5
  • 0 64 = f6
  • 0 65 = f7
  • 0 66 = f8
  • 0 67 = f9
  • 0 68 = f10
  • 224 71 = Home
  • 224 72 = & warr;(箭头)
  • 224 73 = Page Up
  • 224 75 = ←(左箭头)
  • 224 77 = & rrr;(右箭头)
  • 224 79 =结束
  • 224 80 = ↓(向下箭头)
  • 224 81 = Page Down
  • 224 133 = f11
  • 224 134 = f12
至于如何使用这些代码,请查看SetConsoleCursorPosition和相关的控制台API函数。
相关文章: