Прочитать числа из файла и записать их в два других файла по условию - C (СИ)
Формулировка задачи:
Нужно написать простенькую программу которая берет из текстового файла числа и создает два других файла в один из которых записывает только положительные числа а в другой только отрицательные
Решение задачи: «Прочитать числа из файла и записать их в два других файла по условию»
textual
Листинг программы
#include <stdio.h>
#include <locale>
#include <stdlib.h>
#define MAX 1000
int main(int argc, char *argv[])
{
int i, b, a, sym;
char *str;
srand(time(NULL));
FILE *fp, *sp, *tp;
if (argc < 4) {
argv[1] = "Original_file.txt";
argv[2] = "Negfile_nymb.txt";
argv[3] = "Positfive_nymb.txt";
}
if (fp = fopen(argv[1], "r"));
else {
fp = fopen(argv[1], "wt");
for (int v = 0; v < MAX; ++v) {
a = -100 + rand() % 500;
for (a < 0 ? i = 2 : i = 1, b = a; b /= 10; ++i);
str = (char*)calloc(i, sizeof(int));
itoa(a, str, 10);
fputs(str, fp);
putc('\t', fp);
free(str);
}
fclose(fp);
fp = fopen(argv[1], "r");
}
sp = fopen(argv[2], "wt");
tp = fopen(argv[3], "wt");
char *out = (char*)calloc(10, sizeof(char));
for (int i = 0; (sym = getc(fp)) != EOF;)
if (isdigit(sym) || sym == '-')
out[i++] = sym;
else if (i) {
out[i] = '\0';
sym = atoi(out);
if (sym < 0) {
fputs(out, sp);
putc('\t', sp);
}
else {
fputs(out, tp);
putc('\t', tp);
}
i = 0;
}
fclose(fp);
fclose(sp);
fclose(tp);
return 0;
}
Объяснение кода листинга программы
- Объявлены переменные:
- i, b, a, sym - целочисленные, используются для работы с числами и циклом;
- str - указатель на строку, используется для работы со строковым представлением числа;
- out - указатель на строку, используется для временного хранения числового значения.
- Задана начальная установка:
- Задана начальная установка для случайной генерации чисел;
- Открыты файлы: исходный файл для чтения и два файла для записи.
- Проверка входных аргументов:
- Если в командной строке менее трех аргументов, то используются стандартные имена файлов;
- Открыт файл для записи.
- Генерация чисел и их запись в файл:
- Если не удалось открыть файл для записи, то сгенерированы и записаны в него случайные числа;
- Закрыт файл для чтения и открыт для записи.
- Чтение чисел из файла и их запись в другие файлы:
- Число считывается из файла до тех пор, пока не встретится нечисловое значение или конец строки;
- Если число отрицательное, то оно записывается в один файл, иначе - в другой;
- Закрыты все файлы.
- Код выполняется до тех пор, пока не будут выполнены все условия.