У меня есть сотни 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 или около того), но до получения бесконечного вывода. Я был бы рад, если бы кто-то мог указать на ошибки, которые я делаю в коде ... Я использую gcc 5.2.1 с Linux. Спасибо!
TL; DR. Но 'for (n = 1; n = 200; n ++)' генерирует предупреждение с GCC, и я предполагаю, что вы действительно имели в виду 'n <200'. Мораль истории: скомпилируйте с полными уровнями предупреждения и не считайте программу правильной, пока вы не будете на 100% без предупреждения. –
Не только это - почему ваш массив 'filename' маленький? Вы рискуете перезаписать память, пытаясь микроуровнять, насколько велика эта массив. Сделайте это 'filename [25]' и сделайте с ним. – PaulMcKenzie
@ChristianHackl: Я не мог прочитать никаких предупреждений, если они когда-либо были там. Спасибо за указание ошибок. PaulMcKenzie: Я думал, что будет достаточно 8 (не 6), так как у меня есть имена файлов с 7 символами при макс. Спасибо за совет! – porfavorinho