Как я могу разорвать петлю, когда конкретный персонаж был поражен?

Предположим, у меня есть петля, как

for(int i = 0; i < 100000; i++)
{
crunch_data(i);

if(i_has_been_hit())
break;
}

и я хотел бы выйти из цикла всякий раз, когда я ударил я на клавиатуре. Теперь следующий подход не будет работать, так как std::cin блоки:

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

Есть ли функция, которая позволяет мне проверять, была ли нажата клавиатура без блокировки? Если это имеет какое-то значение, я использую g ++ на Win32 с CodeBlocks.

2

Решение

Если вы используете 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
}
}
0

Другие решения

Вы имели в виду идеальную неблокирующую модель ввода / вывода ?? Если так трудно достичь, и я не знаю каких-либо существующих способов сделать это, но вы можете сделать что-то вроде этого

использование _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;
}
0