如何在特定角色被击中时打破循环?

时间:2014-03-27 12:17:09

标签: c++ loops getchar

假设我有一个像

这样的循环
for(int i = 0; i < 100000; i++)
{
    crunch_data(i);

    if(i_has_been_hit())
        break;
}

我想在键盘上按 i 时退出循环。现在,以下方法无法工作,因为std::cin会阻止:

bool i_has_been_hit(){
    char a;
    std::cin >> a;
    return a == 'i';
}

是否有一个功能可以让我检查键盘是否被击中而没有阻塞?如果它有所不同,我在Win32上使用g ++和CodeBlocks。

2 个答案:

答案 0 :(得分:0)

您的意思是完美的非阻塞I / O模型吗?如果是这样很难实现,我不知道现有的方法,但你可以做这样的事情

使用 _kbhit()

for(int i=0;i<100000;i++)
{
    cout<<"Hi";
    while (true) {
          if (_kbhit()) {
        char a = _getch();
        // act on character a in whatever way you want
    }

    Sleep(100);
    if(a=='i')
       break;
}

答案 1 :(得分:0)

如果您使用的Win32与conio.h可用,则可以使用通常的kbhit()getch()组合:

#include <conio.h>
#include <iostream>

int main(){
  for(int i=0;i<100000;i++)
  {
      std::cout<<"Hi";
      if(kbhit() && getch() == 'i'){
          break;
      }
      // other code
  }
}