c ++ getline loop str

时间:2015-06-06 20:46:54

标签: c++ string loops

我有这个c ++代码。我想阅读两个名为hasil_eta.txthasil_T.txt的文本文件,然后将它们存储到一个名为eta_T.txt的文件中。

我读过的文件是1列中的多行。我想加入两个文本文件并将它们存储在一个文件中。

这是代码

#include <iostream>
#include <sstream>
#include <iomanip>
#include <fstream>
#include <string>
#include <sstream>
#include <cstdlib>
#include "rwparams.h"

using namespace std;

string IntToStr(int n){
  stringstream result;
  result << n;
  return result.str();
}

int main(){
    ifstream f5;//read eta 
    ifstream f6;//read T 
    ofstream f7;//store it into file
    string hasil_eta;//menampilkan hasil untuk eta
    string hasil_T;//menampilkan hasil untuk T`

    int pengulangan = 170;

    for (int i = 0; i < pengulangan; i++){
        f5.open("hasil_eta.txt");
        getline(f5, hasil_eta);

        f6.open("hasil_T.txt");
        getline(f5, hasil_T);

        f7.open("eta_T.txt");
        f7 << hasil_eta.c_str();
        f7 << " ";
        f7 << hasil_T.c_str();
        f7 << endl;

        f7.close();
        f6.close();
        f5.close();
    }
}

我的问题是如何制作循环来读取文件。

2 个答案:

答案 0 :(得分:1)

如果您尝试将两个文件中的行分散为一个,那么您可能需要类似

的内容
#include <fstream>
#include <string>

int main(int,char**){
  std::ifstream e("hasil_eta.txt");
  std::ifstream t("hasil_T.txt");
  std::ofstream et("eta_T.txt");
  for( std::string e_line, t_line;
       std::getline(e, e_line) && std::getline(t, t_line); )
    et
      << e_line << std::endl
      << t_line << std::endl
      ;
  return 0;
}

上面的代码将循环n次,其中n是最短文件中的行数。

答案 1 :(得分:0)

您反复重新打开文件,因此您不断阅读输入中的第一行,并截断输出文件。
(还有一个小错误,你从f5而不是f6读取。)

打开循环外的文件,或在初始化时指定文件:ifstream f5("hasil_eta.txt"); 删除close来电;析构函数为你处理。
同时删除c_str(),它们是不必要的。

int main(){
    ifstream f5("hasil_eta.txt");
    ifstream f6("hasil_T.txt");
    ofstream f7("eta_T.txt");
    int pengulangan = 170;
    for (int i = 0; i < pengulangan; i++){
       string hasil_eta;
       string hasil_T;
       getline(f5, hasil_eta);
       getline(f6, hasil_T);
       f7 << hasil_eta;
       f7 << " ";
       f7 << hasil_T;
       f7 << endl;
    }
}