I am new to C++ and I was wondering how the function cin in case of a boolean data works. Let's say for instance :
bool a;
cin >> a;
I understand that if I give 0 or 1, my data a will be either true or false. But what happens if I give another integer or even a string ?
I was working on the following code :
#include <iostream>
using namespace std;
int main()
{
bool aSmile, bSmile;
cout << "a smiling ?" << endl;
cin >> aSmile;
cout << "b smiling ?" << endl;
cin >> bSmile;
if (aSmile && bSmile == true)
cout << "problem";
else
cout << "no problem";
return 0;
}
If I give the values of 0 or 1 for both boolean, there is no problem. But if I give another integer, here is the output :
a smiling ?
9
b smiling ?
problem
I am not asked to enter any value to bSmile, the line cin >> bSmile
seems to be skipped.
The same happens if I give a string value to aSmile.
What happened?
From cppreference:
If the type of
v
isbool
andboolalpha
is not set, then if the value to be stored is 0
,false
is stored, if the value to be stored is1
,true
is stored, for any other valuestd::ios_base::failbit
is assigned toerr
andtrue
is stored.
Since you entered a value that was not 0
or 1
(or even "true"
or "false"
) the stream set an error bit in its stream state, preventing you from performing any further input.
clear()
should be called before reading into bSmile
. Also, this is a good reason why you should always check if your input suceeded with a conditional on the stream itself.