Предположим, у меня есть петля, как
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.
Если вы используете 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
}
}
Вы имели в виду идеальную неблокирующую модель ввода / вывода ?? Если так трудно достичь, и я не знаю каких-либо существующих способов сделать это, но вы можете сделать что-то вроде этого
использование _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;
}