gpt4 book ai didi

c++ - 为什么 stringstream 有这种行为?

转载 作者:行者123 更新时间:2023-11-27 22:57:21 27 4
gpt4 key购买 nike

我有这样一段代码,关于stringstream。我发现了一个奇怪的行为:

#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;

int main()
{
int p, q;
fstream file;
string str;
stringstream sstr;

file.open("file.txt", ios::in);
if(file.is_open()) {
while(getline(file, str)) {
sstr << str;
sstr >> p >> q;
cout << p << ' ' << q << endl;
sstr.str("");
}
}
file.close();

return 0;
}

假设我有 file.txt 为

4 5

0 2

在第一行 5 和第二行 2 之后返回。该程序给我:

4 5

4 5

这意味着 pq 没有正确分配。但是我每次检查 sstr.str() 都会得到正确的行字符串。

为什么 stringstream 有这样的行为?

最佳答案

流在读取第二个整数后处于非良好状态,因此您必须在恢复之前重置其错误状态。

你真正的错误是没有检查输入操作的返回值,否则你会立即发现!


更简单的解决方案可能是不尝试重用相同的流,而是在每一轮都重新创建它:

for (std::string line; std::getline(file, line); )
{
std::istringstream iss(line);
if (!(iss >> p >> q >> std::ws) || !iss.eof())
{
// parse error!
continue;
}
std::cout << "Input: [" << p << ", " << q << "]\n";
}

关于c++ - 为什么 stringstream 有这种行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31506146/

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