I have written a console program. It should wait untill user presses a key. What function should I use to get a key from keyboard?
I have written a console program. It should wait untill user presses a key. What function should I use to get a key from keyboard?
Learn C++ (C++ Books, C Books, FAQ, Forum Search)
Code painter latest version on sourceforge DOWNLOAD NOW!
Download FSB Data Integrity Tester.
Siavosh K C
You can use fgetc(), or getch() if your compiler has conio.h
Good class architecture is not like a Swiss Army Knife; it should be more like a well balanced throwing knife.
- Mike McShaffry
It works. Thanks. Last time I tried to use getc() from stdio.h but it didn't work as I wanted.
Now, how can I flush the buffer?
Last edited by siavoshkc; 01-18-2006 at 05:15 AM.
Learn C++ (C++ Books, C Books, FAQ, Forum Search)
Code painter latest version on sourceforge DOWNLOAD NOW!
Download FSB Data Integrity Tester.
Siavosh K C
When I use
It works fine.Code:cout<<"Press a key to exit..."<<endl; getch();
But when I write
It doesn't print last line to screen. But after I press a key it prints it and exits. Why?Code:cout<<"Press a key to exit..."; getch();
Learn C++ (C++ Books, C Books, FAQ, Forum Search)
Code painter latest version on sourceforge DOWNLOAD NOW!
Download FSB Data Integrity Tester.
Siavosh K C
you are mixing c++-style io-functions ( cout << ... ) and c-style functions ( getchar() ). that is never a good idea.
if you would just use
you would not have that problem because cin and cout are synchronized.Code:char x; cout<<"Press a key to exit..."; cin >> x;
if you still want to use your way you could flush cout before waiting for a char.
KurtCode:cout<<"Press a key to exit..."; cout.flush(); getchar();
I'm pretty certain it has something to do with endl - IIRC it flushes the output buffer. Not sure if that's a problem, someone else will have to verify that.
Note that getchar() and getch() are two different functions, he's using the latter.
Good class architecture is not like a Swiss Army Knife; it should be more like a well balanced throwing knife.
- Mike McShaffry
That is right outputting endl on cout will automatically flush the buffer. '\n' at the end of the string would not. But the OP didn't even have a '\n' at the end of his outputstring I assumed that he wants the curser to stay on the same line. In that case flush is the only way to make shure the string gets displayed.Originally Posted by ahluka
Ok I missread that. But that makes it even worse. Don't think that a nonstandard function will be synchronized with cout.Originally Posted by ahluka
Kurt
That is what I have always used.Code:cin.get();
OK. And what about flushing input stream?
Learn C++ (C++ Books, C Books, FAQ, Forum Search)
Code painter latest version on sourceforge DOWNLOAD NOW!
Download FSB Data Integrity Tester.
Siavosh K C
if you want them to press "any" key to exit, just do something like this...
Code:int main() { //whatever you want to go here system("pause");//waits till user hits any key }
What is it? Is it a system function? What should be included?
Learn C++ (C++ Books, C Books, FAQ, Forum Search)
Code painter latest version on sourceforge DOWNLOAD NOW!
Download FSB Data Integrity Tester.
Siavosh K C
It doesn't work It exits without wait.Originally Posted by Wraithan
Learn C++ (C++ Books, C Books, FAQ, Forum Search)
Code painter latest version on sourceforge DOWNLOAD NOW!
Download FSB Data Integrity Tester.
Siavosh K C
Two varients:
andCode:cout<<"Press a key to exit..."; cout.flush(); getch();
The second code is better because there is no need to flush the input buffer. My program works fine now, thanks a lot.Code:system("pause");//waits till user hits any key
But I still have two questions:
1) How can I flush input stream? (With cin.clear()?)
2) What is this magical function "system()"?
Last edited by siavoshkc; 01-19-2006 at 12:57 AM.
Except system() hands control over to the program it calls without regard to which program it calls, which could potentially be replaced by a malicous program - security risk. Not that it's much of an issue here, just something to keep in mind. The FAQ has an article on this.Originally Posted by siavoshkc
Good class architecture is not like a Swiss Army Knife; it should be more like a well balanced throwing knife.
- Mike McShaffry