I've been trying to solve this problem for a while now with no luck. I want to monitor an input buffer(cin) for a keypress. The catch is, I don't want it to hang if the buffer is empty. getch() and peek() won't work because one waits for a keypress and the other waits for the return key. Is there any way to check for a keypress, but move on if there was no keypress? I know there is a DOS interrupt available in assembly, but I don't know how to do it with C.
I looked up kbhit() and I read that it typically was a Borland Turbo C++ thing. Sure enough though, MS Visual Studio 2005 has a _kbhit(). It worked like a charm! The thing is, kbhit() does not return the key you pressed, only wether a key is pressed or not. So, I wrote a simple piece of code for anyone who might be interested in doing something similar. Also, I noticed that if you fill the buffer with more than one keystroke, and you use getch() it gets the keys one at a time in the order you pressed them.
I'd like to add something (in case anyone is interested). An issue with the code I previously posted was that if there was a lot of time between calls to kbhit() and you only used one call to getch() then you might still have keystrokes left in the buffer. This might cause a problem if you want to assure you have the most recent keystroke. The simple solution is to nest a loop inside the if statement. I've included a ery slightly modified version of the previous code to show how to make sure you have only the most recent keypress.
Thanks to nanodano for his nifty piece of code! It's not all that easy to check the input buffer under Windows, and the sleep() feature does a nice job relinquishing the CPU while still checking periodically for user input...
No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Previous Thread in C++ Forum Timeline:Text and SDL