gpt4 book ai didi

stream is false 和 eof() 之间的 C++ 区别

转载 作者:行者123 更新时间:2023-11-30 02:42:34 31 4
gpt4 key购买 nike

string tmp("f 1/2/3 4/5/6 7/8/9");
istringstream stin(tmp);
string token;
char ch;
int a,b,c,e;
stin >> token;
while(stin){
stin >> a >> ch >> b >> ch >>c;
cout <<a << " "<<b <<" "<<c << endl;
}

为什么输出是1 2 34 5 67 8 97 8 9但是为什么要将 while(stin) 更改为 while(!stin.eof())输出是

  • 1 2 34 5 67 8 9

那么 while(stin) 和 while(!stin.eof()) 有什么区别非常感谢!

最佳答案

原因是您在打印变量之前没有检查读取是否成功。 eof() 检查较早地停止了读取(因为它到达了 std::istringstream 的末尾)但包含它自己的细微错误:

参见: Why is iostream::eof inside a loop condition considered wrong?

例如,尝试在输入的末尾添加一个空格:"f 1/2/3 4/5/6 7/8/9 " 你会得到相同的结果,重复,用eof()检查输出。

理想的解决方案可能是这样的:

int main()
{
istringstream stin("f 1/2/3 4/5/6 7/8/9");

string token;

char ch;
int a, b, c;

stin >> token;
while(stin >> a >> ch >> b >> ch >> c) // only loop on successful read
{
cout << a << " " << b << " " << c << endl;
}
}

关于stream is false 和 eof() 之间的 C++ 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26953463/

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