Отображение содержимого текстового файла - C (СИ)
Формулировка задачи:
Доброго времени суток всем. Набрал на Си алгоритм поиска простых чисел - решето Эратосфена.
Входной файл INPUT.TXT содержит два натуральных числа M и N, разделенных пробелом (2 <= n <= m <= 10^6)
В выходной файл OUTPUT.TXT вывожу все простые числа от n до m в порядке возрастания.
Код:
Работает, в общем-то верно. Но когда интервал n..m приблизительно 10000 и больше. То в выходном файле в большинстве случаев вижу такую белиберду:
Но иногда числа отображаются корректно. Еще раз хочу отметить, что программа работает верно и, если выводить числа на экран, никаких проблем не возникает.
Использую Code::blocks. Подскажите пожалуйста, в чем может быть проблема?
#include <stdio.h>
#include <math.h>
#include <time.h>
#define MAX_NUM 1000001
void main(int argc, char *argv[])
{
///Открываем файлы и получаем исходные данные.
FILE *input = fopen("input.txt", "r");
FILE *output = fopen("output.txt", "w");
long int m, n;
fscanf(input, "%d %d", &n, &m);
long int i, sqrt_m = (int) floor(sqrt((double) m));
static long int arr[MAX_NUM];
///В качестве искомых простых чисел выступают индексы массива arr. arr[i] == 0 - простое, arr[i] != 0 - составное.
arr[0] = arr[1] = 1;
long int j = 1;
while (++j < sqrt_m) { ///От 2 до корня из m
if (arr[j] != 1) ///Если число j - простое
for (i = j*j; i <= m; i+=j) ///В заданном интервале помечаем числа, делящиеся на j, как составные.
arr[i] = 1;
}
///Вывод в файл.
for (i = n; i <= m; i++) {
if (arr[i] == 0) fprintf(output, "%d ", i);
}
///Заканчиваем работу с файлами.
fclose(input); fclose(output);
///Отображает время выполнения программы.
printf("Time: %f sec.\n", (float)clock() / CLOCKS_PER_SEC);
system("pause");
return;
}Решение задачи: «Отображение содержимого текстового файла»
textual
Листинг программы
if (kk && !(kk %25))
{
fprintf(pOut,"\n");
kk = 0;
}
Объяснение кода листинга программы
- Проверка условия
kk && !(kk %25). - Если условие истинно, то выполняется блок кода внутри фигурных скобок.
- В блоке кода выполняется команда
fprintf(pOut,\n);, которая выводит символ новой строки в файлpOut. - Переменная
kkобновляется значением 0. - Если условие в начале блока кода было истинно, то после выполнения команд внутри блока кода выполнение программы продолжится с шага 1.
- Если условие в начале блока кода было ложно, то выполнение программы продолжится с команды после закрывающей фигурной скобки.