Отображение содержимого текстового файла - 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.
- Если условие в начале блока кода было ложно, то выполнение программы продолжится с команды после закрывающей фигурной скобки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д