我有一个包含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个整数存储在一个数组中,然后找到最大值。我可以自己做就好了。我读完上一行后,我遇到的问题是进入文件的下一行。
从文本文件中读取第一行
将数字存储在数组中
将数组发送到返回数组中最大整数的函数
将返回的数字放在一个新数组中,该数组最终将包含文件所有16行中最大的数字
阅读文件的下一行
将带有16个int数组的数组写入文件
我遇到第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;
}
正如您所看到的,我还没有找到最大值函数,我想在继续分析实际数据之前修复我正在阅读的文件。
是的,这是一个家庭作业项目,几天之后,但我的老师甚至没有解释阅读文件,并告诉我们阅读教科书中的解释(这对我们正在做的事情没有帮助)。我希望学习的不仅仅是通过作业,所以我错过了一个简短的解释/例子。
答案 0 :(得分:1)
我会使用istream::getline()一次抓取整行,然后解析结果字符串。然后再次调用getline(),等等。虽然你可能没有阅读终结字符,但为什么你得到的确切行为对我来说并不是很清楚。
答案 1 :(得分:1)
您的代码适用于我。我相信打开一个文件有一个问题,所以它在初始化时不断输出temp []元素。尝试在阅读时获得inFile状态。
答案 2 :(得分:0)
好吧,我认为你不需要阵列。只需逐行读取,对其进行标记,将每个静态转换为int(查看数字范围0-9内的ascii值,以便beingextra谨慎,检查否定等)并直接存储最大值。重复直到EOF,您可能会有最有效的解决方案。
所以步骤将是
1)声明一个临时字符串。
2)读一行
3)对空间进行标记
4)假设第一个是最大值。继续阅读和比较。如果找到更大的值,则交换值
5)重复到最后