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?
Printable View
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?
You can use fgetc(), or getch() if your compiler has conio.h
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? :confused:
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();
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.
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.Quote:
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.Quote:
Originally Posted by ahluka
Kurt
That is what I have always used.Code:cin.get();
OK. And what about flushing input stream?
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?
It doesn't work :confused: It exits without wait.Quote:
Originally Posted by Wraithan
Please post your updated code.
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()"?
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.Quote:
Originally Posted by siavoshkc