C++ cin keypress event

Lukas Salich picture Lukas Salich · Aug 16, 2012 · Viewed 28.2k times · Source

I believe this is a very simple question, but I can't find a simple answer to it. I have an infinite loop, e.g. while(1), for(;;), and I need to break from the loop on a keypress. What is the easiest way to do this?

P.S.: I can't use getch, cin.ignore, or cin.get because it stops the loop.

Answer

Bartek Banachewicz picture Bartek Banachewicz · Aug 16, 2012

Well, what you want is asynchronous input. All of the methods provided by cin wait for enter. You will have to use system-specific functions for that, or use a library that will do it for you.

What you need to do is to not only process your logic in a while loop, but also listen from message pipe from your OS. If you want some more information about that one, please drop a comment.

EDIT: There's one other way, but I wouldn't recommend it as it can be non-portable I believe. The following code compiles and runs under VS2012RC.

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

using namespace std;

int main()
{
   cout << "Enter a character";
   getch();
}