使用stringstream输入/输出bool值

时间:2013-11-24 01:20:43

标签: c++ stringstream

这似乎是一个愚蠢的问题,但我很难过。这是我的代码:

int main()
{
    string line, command;
    getline(cin, line);
    stringstream lineStream(line);

    bool active;
    lineStream >>active;
    cout <<active<<endl;

}

无论我输入什么活动,它总是打印出来0.所以我想输入

true

它会输出0,同样的东西也是假的。

3 个答案:

答案 0 :(得分:13)

您应该始终验证您的输入是否成功:您会发现它不是。您想使用当前设置尝试值1

if (lineStream >> active) {
    std::cout << active << '\n';
}
else {
    std::cout << "failed to read a Boolean value.\n";
}

如果您希望能够输入truefalse,则需要使用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;
}