Создание файла, компонентами которого являются целочисленные массивы - C (СИ)
Формулировка задачи:
Создать файл F1, компонентами которого являются
целочисленные массивы a1,.., a10, закрыть его.
Решение задачи: «Создание файла, компонентами которого являются целочисленные массивы»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #define SIZE 10 int main (void) { char file[] = "output.bin"; int ** array; int i, j; FILE * fp; if ((fp = fopen (file, "wb")) == NULL){ printf ("Cannot open file!\n"); getchar (); exit (1); } array = (int **) calloc (SIZE, sizeof (int *)); for (i = 0; i < SIZE; i++) array[i] = (int *) calloc (SIZE, sizeof (int)); for (i = 0; i < SIZE; i++) for (j = 0; j < SIZE; j++) array[i][j] = j; for (i = 0; i < SIZE; i++) fwrite (array[i], sizeof(int), SIZE, fp); fclose (fp); for (i = 0; i < SIZE; i++) free (array[i]); free (array); fp = fopen (file, "rb"); array = (int **) calloc (SIZE, sizeof (int *)); for (i = 0; i < SIZE; i++) array[i] = (int *) calloc (SIZE, sizeof (int)); for (i = 0; i < SIZE; i++) fread (array[i], sizeof (int), SIZE, fp); for (i = 0; i < SIZE; i++){ if (i != 0) putchar ('\n'); for (j = 0; j < SIZE; j++) printf ("%4d", array[i][j]); putchar ('\n'); } return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяется размер массива (SIZE)
- Открывается файл для записи в двоичном формате (fp = fopen(file,
wb
)) - Выделяется память под двумерный массив (array = (int *) calloc (SIZE, sizeof (int )))
- Выделяется память под каждый элемент массива (for (i = 0; i < SIZE; i++) array[i] = (int *) calloc (SIZE, sizeof (int)))
- Заполняется массив значениями от 0 до SIZE-1 (for (i = 0; i < SIZE; i++) for (j = 0; j < SIZE; j++) array[i][j] = j)
- Записывается массив в файл (for (i = 0; i < SIZE; i++) fwrite(array[i], sizeof(int), SIZE, fp))
- Закрывается файл (fclose(fp))
- Освобождается память (for (i = 0; i < SIZE; i++) free(array[i]); free(array))
- Открывается файл для чтения (fp = fopen(file,
rb
)) - Снова выделяется память под двумерный массив (array = (int *) calloc (SIZE, sizeof (int )))
- Снова выделяется память под каждый элемент массива (for (i = 0; i < SIZE; i++) array[i] = (int *) calloc (SIZE, sizeof (int)))
- Считывается массив из файла (for (i = 0; i < SIZE; i++) fread(array[i], sizeof (int), SIZE, fp))
- Выводится содержимое массива (for (i = 0; i < SIZE; i++){ if (i != 0) putchar ('\n'); for (j = 0; j < SIZE; j++) printf (
%4d
, array[i][j]); putchar ('\n');}) - Освобождается память (for (i = 0; i < SIZE; i++) free(array[i]); free(array))
- Закрывается файл (fclose(fp))
- Завершается программа (return 0)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д