簡體   English   中英

Ifstream.getline() - 只讀第一行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM