C ++在带有数字的文本文件中读取

时间:2011-10-27 20:43:23

标签: c++ io

我有一个包含16行整数的txt文件。每行包含5个整数,这里是文件的前4行,

  

0 0 0 0 0

     

1 2 3 4 5

     

5 4 3 2 1

     

5 100 1000 10000 10500

我需要一次读取一行,将所有5个整数存储在一个数组中,然后找到最大值。我可以自己做就好了。我读完上一行后,我遇到的问题是进入文件的下一行。

  1. 从文本文件中读取第一行

  2. 将数字存储在数组中

  3. 将数组发送到返回数组中最大整数的函数

  4. 将返回的数字放在一个新数组中,该数组最终将包含文件所有16行中最大的数字

  5. 阅读文件的下一行

  6. 将带有16个int数组的数组写入文件

  7. 我遇到第5步的问题。每次运行代码时,每次都会读取第1行。

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main()
    {
        int n,i,j;
        int temp[5];
        //ask user
        cout<<"How many lines are in the file\n";
        cin>>n;
        int *array = new int[n];
        //open file
        ifstream inFile;
        inFile.open("input.txt");
    
        for(j=0;j<n;++j)
        {
            for(i=0;i<5;++i)
            {
                inFile >> temp[i];
                cout<<temp[i]<<" ";
            }
            cout<<"\n";
        }
        return 0;
    }
    

    正如您所看到的,我还没有找到最大值函数,我想在继续分析实际数据之前修复我正在阅读的文件。

    是的,这是一个家庭作业项目,几天之后,但我的老师甚至没有解释阅读文件,并告诉我们阅读教科书中的解释(这对我们正在做的事情没有帮助)。我希望学习的不仅仅是通过作业,所以我错过了一个简短的解释/例子。

3 个答案:

答案 0 :(得分:1)

我会使用istream::getline()一次抓取整行,然后解析结果字符串。然后再次调用getline(),等等。虽然你可能没有阅读终结字符,但为什么你得到的确切行为对我来说并不是很清楚。

答案 1 :(得分:1)

您的代码适用于我。我相信打开一个文件有一个问题,所以它在初始化时不断输出temp []元素。尝试在阅读时获得inFile状态。

答案 2 :(得分:0)

好吧,我认为你不需要阵列。只需逐行读取,对其进行标记,将每个静态转换为int(查看数字范围0-9内的ascii值,以便beingextra谨慎,检查否定等)并直接存储最大值。重复直到EOF,您可能会有最有效的解决方案。

所以步骤将是

1)声明一个临时字符串。

2)读一行

3)对空间进行标记

4)假设第一个是最大值。继续阅读和比较。如果找到更大的值,则交换值

5)重复到最后