int main()
{
string line, command;
getline(cin, line);
stringstream lineStream(line);
bool active;
lineStream >>active;
cout <<active<<endl;
}
无论我输入什么活动,它总是打印出来0.所以我想输入
true
它会输出0,同样的东西也是假的。
答案 0 :(得分:13)
您应该始终验证您的输入是否成功:您会发现它不是。您想使用当前设置尝试值1
:
if (lineStream >> active) {
std::cout << active << '\n';
}
else {
std::cout << "failed to read a Boolean value.\n";
}
如果您希望能够输入true
和false
,则需要使用std::boolalpha
:
if (lineStream >> std::boolalpha >> active) {
std::cout << std::boolalpha << active << '\n';
}
格式化标志更改了bool
格式化为使用与语言环境相关的字符串的方式。
答案 1 :(得分:4)
尝试使用boolalpha
操纵器。
lineStream >> boolalpha >> active;
cout << boolalpha << active << endl;
默认情况下,输入和输出bool
值为小数字。 boolalpha
告诉流改为使用字符串“true”和“false”来表示它们。
答案 2 :(得分:1)
for ostringstream
ostringstream& writeBool( ostringstream& oss, bool val )
{
oss <<std::boolalpha << val;
return oss;
}
for istringstream
bool readBool( std::istringstream& iss )
{
bool readVal(false);
iss >> std::boolalpha >> readVal;
return readVal;
}