我有成百上千的.txt文件按数字排序:1.txt,2.txt,3.txt,... n.txt。在每个文件中有两列有十进制数字。 我写了一个算法,它只对一个.txt文件进行一些操作,现在我想递归地对它们进行相同的操作。 This helpful question给了我一些我想要做的事情。 现在我想要写一个算法来读取所有文件:C++ - 顺序打开文本文件
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
int i, n;
char filename[6];
double column1[100], column2[100];
for (n=1;n=200;n++)
{
sprintf(filename, "%d.txt", n);
ifstream datafile;
datafile.open(filename);
for (i=0;i<100;i++)
{
datafile >> column1[i] >> column2[i];
cout << column1[i] << column2[i];
}
datafile.close();
}
return 0;
}
我觉得代码是这样做的:它是从的1.txt直到200.txt创建的字符串名称,然后将它打开文件与这些名字。对于每个文件,前100列将与数组column1和column2相关联,然后这些值将显示在屏幕上。 编译它时我没有收到任何错误,但是当我运行它时,输出是巨大的,并且不会停止。如果我将输出设置为一个.txt文件,它很容易达到一些Gb! 我也尝试减少循环数和减少列数(3左右),但我直到得到无限的输出。我会很高兴,如果有人可以指出我在代码中所犯的错误... 我在Linux上使用gcc 5.2.1。 谢谢!
TL; DR。但是对于(n = 1; n = 200; n ++)'用GCC产生一个警告,我的第一个猜测就是你的意思是'n <200'。故事的道德:编写完整的警告级别,并且在100%无警告之前不要考虑程序是否正确。 –
不仅如此,为什么你的'filename'数组很小?试图微观管理这个阵列的规模有多大,你会冒着内存覆盖的风险。使它成为'文件名[25]'并完成它。 – PaulMcKenzie
@ChristianHackl:如果他们曾经在那里,我就读不出任何警告。无论如何感谢您指出错误。 PaulMcKenzie:我认为长度为8(不是6)就足够了,因为我有最多7个符号的文件名。谢谢你的建议! – porfavorinho