Написать любую программу со структурой и файлами - C (СИ)
Формулировка задачи:
Нужно написать любую программу. Задание такое : Написать программу со структурой. Работа с файлами , чтение и запись.
Решение задачи: «Написать любую программу со структурой и файлами»
textual
Листинг программы
// Формирование файла с записями типа struct
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <values.h>
typedef struct { //Определяем структуру как элемент типа item
unsigned int n; //Беззнаковое целое
char s; //Односимвольная номенклатура
} item;
int main (void) {
FILE *f;
item z[20];
int i;
clrscr();
f=fopen ("struct.dat","wb"); //Открытие файла для записи и проверка
if (f==NULL) {
printf ("\n Не могу открыть файл struct.dat для записи данных!"
"\n Нажмите любую клавишу...");
fflush (stdin); getchar(); return 1;
}
printf ("\n Сейчас программа сгенерирует 20 записей типа struct"
"\n Информация будет записана в файл struct.dat"
"\n Нажмите любую клавишу...");
fflush (stdin); getchar(); //Ждем нажатия клавиши
randomize(); //Сбрасываем генератор случайных чисел
for (i=0; i<20; i++) {
z[i].n=random (MAXINT); //Формируем 20 случайных элементов списка
z[i].s='A'+i;
fwrite (&z[i],sizeof(item),1,f); //Пишем элемент списка в файл
printf ("\n элемент %2d: (%u,%c)",i,z[i].n,z[i].s);
//Выводим элемент списка на экран
}
printf ("\n Закроем файл struct.dat и затем прочитаем его с диска"
"\n Нажмите любую клавишу...\n\n");
fflush (stdin); getchar();
fclose (f);
f=fopen ("struct.dat","rb"); //Открытие файла для чтения и проверка
if (f==NULL) {
printf ("\n Не могу открыть файл struct.dat для чтения данных!"
"\n Нажмите любую клавишу...");
fflush (stdin); getchar(); return 2;
}
for (i=0; i<20; i++) { //Читаем из файла элементы списка
fread (&z[i],sizeof(item),1,f); //и выводим их на экран
printf ("\n элемент %2d: (%u,%c)",i,z[i].n,z[i].s);
}
printf ("\n Нажмите клавишу для выхода...");
fflush (stdin); getchar(); //Ждем нажатия клавиши
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем структуру item, которая состоит из беззнакового целого и односимвольной номенклатуры
- Объявляем переменные: FILE *f, item z[20], int i
- Открываем файл
struct.datдля записи в двоичном формате с помощью функции fopen - Проверяем, что файл успешно открыт, иначе выводим сообщение об ошибке и завершаем программу
- Выводим сообщение о том, что программа будет генерировать 20 записей типа struct и записывать их в файл
struct.dat - Сбрасываем генератор случайных чисел с помощью функции randomize
- Запускаем цикл for от 0 до 20 и генерируем случайное значение для n и 'A' + i для s
- Записываем элемент списка в файл с помощью функции fwrite
- Выводим элемент списка на экран с помощью функции printf
- Закрываем файл с помощью функции fclose
- Открываем файл
struct.datдля чтения с помощью функции fopen - Проверяем, что файл успешно открыт, иначе выводим сообщение об ошибке и завершаем программу
- Запускаем цикл for от 0 до 20 и читаем элементы списка из файла с помощью функции fread
- Выводим элемент списка на экран с помощью функции printf
- Выводим сообщение
Нажмите клавишу для выхода... - Ждем нажатия клавиши с помощью функции getchar
- Завершаем программу с помощью функции return