In order to test bool i/o, I tried to run this short program:
#include
int main()
{
while(true)
{
bool f;
if (std::cin >> f)
std
Add this line after clearing cin:
std::cin.ignore();
This way, the stream ignores whatever is left on its buffer.
if (std::cin >> f)
expects either a 0 or 1. And treats all other values as an I/0 error. Even if you enter '-' or 2, std::cin.ignore()
is still needed.
If you want the program to enter only the values true or false, use the following statement instead of (std::cin >> f)
(std::cin >> boolalpha >> f)
Try to use following combo:
cin.ignore(INT_MAX, '\n'); // ignore all characters in the current line
cin.clear(); // restore 'good' flag
Using only cin.ignore()
will discard only one character in the buffer.