Создание файла, компонентами которого являются целочисленные массивы - 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)