Is fflush(stdin) is really required in C++ and is it good to do it this way to flush the newline in the buffer?
The call to fflush(stdin) is undefined behavior in C (and, consequetly, in C++).
The C language standard, ISO 9899:1999 states in 7.19.5.2/2
If stream points to an output stream or an update stream in which the most recent operation was not input, the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined
To discard the entire input up to the next end of line, in C++, the most robust approach is
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
As for the program "flashing and going away", are you perhaps executing a console application on a Windows platform? Such applications are best executed from a console window (Start->run->cmd.exe)
Use cin.get () instead of getchar () and you should be fine. The problem is that C++ I/O streams and C I/O functions are working on top of the same file descriptors, but have different buffers. I can't tell what exactly is going on w/o debugging, but it feels like getchar() that you are calling to pause a program until character is entered is getting characters that were already read by C++ input stream. So it gets data and unblocks, so you exit the program.
If you still have the problem, make sure you don't enter `\n' characters (i.e. don't press enter). Because pressing enter after input is actually a character that you can read. This problem is usually solved with peeking (see http://www.cplusplus.com/reference/iostream/istream/peek/).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With