使用ifstream从文本文件中打印整数

时间:2014-09-21 02:01:58

标签: c++ file-io ifstream

我有一个任务,我应该读取包含整数的多个文件(每行一个),并在排序后将它们合并到输出文本文件中。我是C ++的新手,所以我不知道一切是如何运作的。我用两个.txt文件测试我的程序。第一个文件名为fileone.txt,包含1,2,7(我不知道如何格式化它,但它们都在不同的行上。)第二个文件名为filetwo.txt,包含1,3,5, 9,10(同样每个整数都在不同的行上)。

我编写了以下代码,用于打开这两个文件并打印内容。

#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, char** argv) {

    ifstream iFile;
    ifstream jFile;
    iFile.open("fileone.txt");
    jFile.open("filetwo.txt");

    int int1 = 0;
    int int2 = 0;
    if (iFile.is_open() && jFile.is_open() ){


        while (iFile.good() || jFile.good() ) {

            iFile >> int1;
            jFile >> int2;

            cout << "From first file:" << int1 << endl;
            cout << "From second file:" << int2 << endl;

        }
    }

    iFile.close();
    jFile.close();

    return 0;
}

该程序的输出是 enter image description here

我遇到的问题是第一个文件中的最后一个数字被多次打印。我想要的输出是在打印文件中的最后一个整数后停止打印。仅当第二个文件包含的整数多于第一个文件时,才会出现此问题。有没有办法在第一个文件到达结尾时停止打印,同时仍然打印第二个文件中的所有数字?

2 个答案:

答案 0 :(得分:6)

这样就可以了解

   while (iFile || jFile) {

        if(iFile >> int1) // make sure the read succeeded!!
            cout << "From first file:" << int1 << endl;

        if(jFile >> int2) // make sure the read succeeded!!
            cout << "From second file:" << int2 << endl;
    }

如果您检查是否已成功阅读,则应该只使用数据。

答案 1 :(得分:0)

考虑更改 while 循环,如下所示

  while (iFile.good() || jFile.good() ) {
    iFile >> int1;
    jFile >> int2;
    int c = iFile.peek();
    int d = jFile.peek();
    if (c == EOF) {
      if (!iFile.eof())
         cout << "From first file:" << int1 << endl;
    } 
   if (d == EOF) {
      if (!jFile.eof())
        cout << "From second file:" << int2 << endl;
        }
   }

问题是检查文件的结尾并处理是否打印它。您可以使用上面的 eof()功能。

我没有检查过代码。但逻辑应该是正确的。