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
visboolandboolalphais not set, then if the value to be stored is 0,falseis stored, if the value to be stored is1,trueis stored, for any other valuestd::ios_base::failbitis assigned toerrandtrueis 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.
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