当一个特定的角色被击中时,我该如何打破循环?

How can I break a loop when a specific character has been hit?

本文关键字:循环 何打破 一个 角色      更新时间:2023-10-16

假设我有一个像

这样的循环
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。

如果您使用的是conio.h可用的Win32,您可以使用通常的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
  }
}

你是说一个完美的非阻塞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;
}