Cin and Boolean input

三世轮回 提交于 2019-12-04 20:53:16

问题


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 ?

Thx guys ! :)


回答1:


From cppreference:

If the type of v is bool and boolalpha is not set, then if the value to be stored is ​0​, false is stored, if the value to be stored is 1, true is stored, for any other value std::ios_base::failbit is assigned to err and true 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.



来源:https://stackoverflow.com/questions/26203441/cin-and-boolean-input

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!