gpt4 book ai didi

c++ - Ifstream.getline() - 只读第一行?

转载 作者:行者123 更新时间:2023-11-30 02:40:54 29 4
gpt4 key购买 nike

我只是想运行一个简单的 c++ 程序,该程序将格式化一个包含数据条目的 .txt 文件。我已经用许多完全相同格式的不同文本文件运行它,但现在它无法运行。我确信解决方案很简单。

这是该程序的简化版本(我删减了所有内容以仅显示给我带来麻烦的部分)。

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <iomanip>

using namespace std;

int main(){

ifstream filei("in.txt");
ofstream fileo("comlab.txt");
double a, b;
string s;
stringstream ss;

while (getline(filei,s)){
ss<<s;
ss>>a>>b;
fileo<<setw(10)<<a<<setw(10)<<b<<'\n';
}

fileo.close();
}

这是 in.txt 的示例输入:

1        11
2 22
3 33
4 44
5 55

现在这是我想要显示的内容(与输入完全相同):

1        11
2 22
3 33
4 44
5 55

但实际显示的是:

         1        11
1 11
1 11
1 11
1 11

这是怎么回事?我正在使用 g++ 进行编译并遵循 C++11 标准。

最佳答案

当你执行

    ss>>a>>b;

在循环的第一轮执行中。 ss 已经在流的末尾。即 ss.eof() == true。您需要清除其状态并重置状态才能从头开始阅读。

while (getline(filei,s)){
ss<<s;
ss>>a>>b;
ss.clear();
ss.seakg(0);
fileo<<setw(10)<<a<<setw(10)<<b<<'\n';
}

更好的选择是在循环范围内创建对象。

while (getline(filei,s)){
stringstream ss;
ss<<s;
ss>>a>>b;
fileo<<setw(10)<<a<<setw(10)<<b<<'\n';
}

或者更简单(感谢@vsoftco 的建议)

while (getline(filei,s)){
stringstream ss(s);
ss>>a>>b;
fileo<<setw(10)<<a<<setw(10)<<b<<'\n';
}

关于c++ - Ifstream.getline() - 只读第一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28567738/

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