[英]Ifstream.getline() - Only reading first line?
我只是想運行一個簡單的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';
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.