C++ C++;读取带有数字的文本文件
我有一个包含16行整数的txt文件。每行包含5个整数,这里是文件的前4行 0 0 0 0 123445 5 4 3 2 1 5100100100500 我需要一次读取一行,将所有5个整数存储在一个数组中,然后找到最大值。我一个人可以做得很好。我遇到的问题是,在我读完前一行之后,将转到文件中的下一行C++ C++;读取带有数字的文本文件,c++,io,C++,Io,我有一个包含16行整数的txt文件。每行包含5个整数,这里是文件的前4行 0 0 0 0 123445 5 4 3 2 1 5100100100500 我需要一次读取一行,将所有5个整数存储在一个数组中,然后找到最大值。我一个人可以做得很好。我遇到的问题是,在我读完前一行之后,将转到文件中的下一行 从文本文件中读取第一行 将数字存储在数组中 将数组发送到返回数组中最大整数的函数 将返回的数字放入一个新数组,该数组最终将包含文件所有16行中的最大数字 读取文件的下一行 将具有16 int数组的数组
#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;
}
#包括
#包括
使用名称空间std;
int main()
{
int n,i,j;
内部温度[5];
//询问用户
coutn;
int*数组=新的int[n];
//打开文件
河流充填;
infle.open(“input.txt”);
对于(j=0;j温度[i];
cout好吧,我认为你不需要数组。只要逐行读取,标记它,将每一行静态转换为int(查看0-9范围内的ascii值是否为beingextra,检查是否有负数等),然后直接存储最大值。重复到EOF,你可能会得到最有效的解决方案
因此,步骤将是
1) 声明一个临时字符串
2) 排成一行读
3) 在空间上标记化
4) 假设第一个是最大值。继续读取和比较。如果发现较大的值,则交换这些值
5) 重复到最后,我将使用using一次获取整行,然后解析结果字符串。然后调用getline()同样,等等。虽然我不太清楚为什么你会得到你的确切行为,但你可能没有读到结尾字符。你的代码对我来说很好。我相信打开文件时有问题,所以它会一直输出临时[]元素初始化时。在读取时尝试获取填充状态。第1行是istream::getline(0)还是(1),或者该函数甚至没有取值?@将签出我链接到的文档页。参数是指向保存输入字符串的字符数组的指针、要读取的最大字符数,以及(可选)你要使用的分隔符。谢谢,但是我真的只是开始C++(我对C有一个体面的理解),我不知道如何分析字符字符串GETLIN给你我的数字。@会。这允许你把C字符串分解成单个数字(然后使用ATOI或某事转换成整数)。。描述有点混乱,但如果你将该示例用作模板,你应该能够使其工作。感谢你的帮助,我可以看到该方法可能会变得更干净,但是你知道有什么方法可以让Infle从ifstream读取下一行吗?这是我已经在做的。在我的最后一个程序中,我不会输出每个n除非我误解了你,否则这就是为什么我要填充>>temp[I];couty你的输出对我来说不是很好的说明-初始temp[]值与第一行的内容类似。尝试将temp[]初始化为{-1},这实际上会显示更多:)UPD:如果修改没有改变任何东西,请向我提供有关您正在使用的平台和开发人员软件的一些信息-这种行为可能很有趣。我删除了temp的初始化,并添加了一个cout\n,以便在终端inst中显示每行各自行的输出ead全部加在一起。输出已更改,但所有16行都显示了这一点,0 1880267544 32654 1我会在一开始就添加一个输出,以确保这些不是temp[]的初始值。然后尝试fscanf()我在temp之后添加了一个cout循环来检查,是的,它们是初始值,所以我想我的问题是它没有正确读取文件?