Из файла F в текстовый файл скопировать все нечетные числа - C (СИ)
Формулировка задачи:
прошу написать программу с помощью функций.
В типизированный файл F с помощью датчика случайных чисел записать 200 целых чисел от -50 до +50, затем из файла F в текстовый файл скопировать все нечетные числа.
сам вообще не догоняю,и времени нет,как на злоРешение задачи: «Из файла F в текстовый файл скопировать все нечетные числа»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void error (char* msg) {
fprintf (stderr, msg);
exit(-1);
}
int save_in_binary (FILE* f, int values[], size_t count) {
if (!f || !values) return -1;
return (count == fwrite (values, sizeof(int), count, f)) ? 0 : -1;
}
int save_in_text (FILE* f, int values[], size_t count) {
size_t i;
if (!f || !values) return -1;
for (i = 0 ; i < count ; ++i) {
if (fprintf (f, "%d\n", values[i]) <= 0) {
return -1;
}
}
return 0;
}
int read_from_binary (FILE* f, int values[], size_t max) {
size_t i;
if (!f || !values) return -1;
for ( i = 0 ; i < max && !feof(f) ; ++i ) {
if (1 != fread (&values[i], sizeof(int), 1, f)) {
return -1;
}
}
return i;
}
int generate_from_range (int values[], size_t count, int down, int up) {
size_t i;
if (!values) return -1;
for (i = 0 ; i < count ; ++i) {
values[i] = rand() % (up - down + 1) + down;
}
return 0;
}
#define N (50)
int main() {
int arr[N], arr1[N], odd[N];
size_t i, odd_count;
FILE* f_out_binary, *f_in_binary, *f_out_text;
srand(time(NULL));
generate_from_range (arr, N, -50, 50);
if (!(f_out_binary = fopen ("1.dat", "wb"))) {
error ("error open file for write\n");
}
if (save_in_binary(f_out_binary, arr, N) < 0) {
error ("error save binary file\n");
}
fclose (f_out_binary);
if (!(f_in_binary = fopen ("1.dat", "rb"))) {
error ("error open file for read\n");
}
if (N != (i = read_from_binary(f_in_binary, arr1, N))) {
printf ("%d\n", i);
error ("error read file\n");
}
fclose (f_in_binary);
for (i = 0, odd_count = 0 ; i < N ; ++i) {
if (arr1[i] % 2) odd[odd_count++] = arr1[i];
}
if (!(f_out_text = fopen ("1.txt", "w"))) {
error ("error open text file\n");
}
if (save_in_text (f_out_text, odd, odd_count) < 0) {
error ("error write text file\n");
}
fclose (f_out_text);
return 0;
}
Объяснение кода листинга программы
- В начале кода определяются функции обработки ошибок и функции работы с файлами.
- Создается массив целых чисел для генерации и массив для чтения из файла.
- Задаются начальное и конечное значения для генерации случайных чисел.
- Генерируются случайные числа и записываются в массив.
- Создается файл для записи двоичных данных и записываются в него сгенерированные числа.
- Файл закрывается.
- Открывается файл для чтения двоичных данных и считываются числа из него.
- Создается текстовый файл для записи нечетных чисел.
- В цикле проверяется каждое число на нечетность и записывается в текстовый файл.
- Файл закрывается.
- Возвращается 0, что означает успешное выполнение программы.