我有数百个按文件排序的.txt文件:1.txt,2.txt,3.txt,... n.txt。在每个文件中有两列带有十进制数字。 我编写了一个算法,只对一个.txt文件执行一些操作,现在我想以递归方式对所有文件执行相同操作。 This helpful question让我知道我正在做什么。 现在我正在尝试编写一个算法来读取所有文件:
#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。 谢谢!
答案 0 :(得分:3)
"200.txt"
。它必须至少有8个元素。n=200
错误且始终为真。它应该是n<=200
。答案 1 :(得分:0)
如果您的所有文件都在同一目录中,您也可以使用boost::filesystem
,例如:
auto path = "path/to/folder";
std::for_each(boost::filesystem::directory_iterator{path},
boost::filesystem::directory_iterator{},
[](boost::filesystem::directory_entry file){
// test if file is of the correct type
// do sth with file
});
我认为这是一个更清洁的解决方案。