gpt4 book ai didi

c++ - 为什么在成功将 bool 字符串值转换为 bool 值时,istringstream eof 标志没有变为真?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:53:21 24 4
gpt4 key购买 nike

我正在学习如何使用 istringstream 将存储为字符串的值转换为 native 类型。当存储为字符串的数字成功转换为 intdouble 时,istringstream eof() 函数返回 true。当存储为字符串的 bool 值成功转换为 bool 时,eof() 返回 false。

造成差异的原因是什么?为什么当似乎没有其他字符需要处理时 eof() 不返回 true?

转换为 bool 值的代码:

string value = "true";
istringstream converter(value);
bool convertedValue;

if (!(converter >> std::boolalpha >> convertedValue)){
cout << "Conversion error." << endl;
} else {
cout << "Conversion success." << endl;
}

cout << "convertedValue=" << convertedValue << " value.length()=" << value.length() << " converter.tellg()=" << converter.tellg() << " converter.eof()=" << converter.eof() << endl;

输出显示 eof 标志为假:

Conversion success.
convertedValue=1 value.length()=4 converter.tellg()=4 converter.eof()=0

转换为double的代码:

string value = "1234.56";
istringstream converter(value);
double convertedValue;

if (!(converter >> std::boolalpha >> convertedValue)){
cout << "Conversion error." << endl;
} else {
cout << "Conversion success." << endl;
}

cout << "convertedValue=" << convertedValue << " value.length()=" << value.length() << " converter.tellg()=" << converter.tellg() << " converter.eof()=" << converter.eof() << endl;

输出显示 eof 标志为真:

Conversion success.
convertedValue=1234.56 value.length()=7 converter.tellg()=-1 converter.eof()=1

转换为int的代码:

string value = "1234";
istringstream converter(value);
int convertedValue;

if (!(converter >> std::boolalpha >> convertedValue)){
cout << "Conversion error." << endl;
} else {
cout << "Conversion success." << endl;
}

cout << "convertedValue=" << convertedValue << " value.length()=" << value.length() << " converter.tellg()=" << converter.tellg() << " converter.eof()=" << converter.eof() << endl;

输出显示 eof 标志为真:

Conversion success.
convertedValue=1234 value.length()=4 converter.tellg()=-1 converter.eof()=1

我正在使用 g++ (Debian 4.8.3-3) 4.8.3。

最佳答案

在第一次不成功的输入操作后达到“文件结束”状态,此时没有更多可输入的内容。

在读取字符串的情况下,一个输入操作读取一个字符。

输入 bool 值(“真”)不必尝试读取“e”以外的字符。这与数字的输入操作形成对比,后者可能有下一个数字。

判断是否全部读取:判断tellg结果是否为-1或等于字符串长度。

关于c++ - 为什么在成功将 bool 字符串值转换为 bool 值时,istringstream eof 标志没有变为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24219807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com