I've noticed that whenever I write a program that uses std::cin
that if I want the user to press Enter to end the program, I have to write std::cin.ignore()
twice to obtain the desired behavior. For example:
#include <iostream>
int main(void)
{
int val = 0;
std::cout << "Enter an integer: ";
std::cin >> val;
std::cout << "Please press Enter to continue..." << std::endl;
std::cin.ignore();
std::cin.ignore(); // Why is this one needed?
}
I've also noticed that when I'm not using cin
for actual input but rather just for the ignore()
call at the end, I only need one.
Discl: I'm simplifying what really happens.
The first serves to purge what the extraction operator (>>) hasn't consumed. The second waits for another \n.
It is exactly the same when we do a std::getline after an extraction: a
the_stream::ignore(std::numeric_limits<streamsize>::max(), '\n');
is required before the call to std::getline()That's strange. What platform are you running on? By definition,
ignore
extracts and discards n characters from the input stream or if it hits EOF it stops. If you do not specify any parameters it extracts 1 character. On Windows, line ending involves both a\r
and a\n
-- a total of two characters (a carriage return followed by a newline).