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()