Чтение из файла формата .data,где записи имею свою структуру - C (СИ)
Формулировка задачи:
Задание такое,есть база данных,структура записи там такая
ФИО(32 символа)
Номер отдела целое
Должность(22)
Дата рождения(8)
Это из задания,так вот открываю саму базу и вижу такое что запись в базе сделана так
пример Иванова Татьяна Петровна отд. 130 бухгалтер род.16-06-83
так вот мне надо вывести на экран только список отделов,но получается какая то ерунда. одни нули на экране подскажите в чем причина?как правильно выполнять чтения с файла учитывая что там имеется структура записи?const int n=100; struct SOTRUDNIK { char name[32]; int nomer_otdela; char doljnost[22]; char data_rojd[8]; }; int main () { FILE *data; int i=0; data=fopen("base.dat","r"); for(i=0; i<100; i++) { fscanf(data, "%i ", &rabotnik[i].nomer_otdela); printf("%i ",rabotnik[i].nomer_otdela); } fclose(data); getch(); }
Решение задачи: «Чтение из файла формата .data,где записи имею свою структуру»
textual
Листинг программы
struct SOTRUDNIK { char name[32]; int nomer_otdela; char doljnost[22]; char data_rojd[8]; }; int main () { SOTRUDNIK rabotnik[n]; FILE *data; data=fopen("BASE2.DAT","r+b"); printf("start\n"); for(int i=0;i<32;i++) { fread(&rabotnik[i],sizeof(SOTRUDNIK),i,data); printf("-------Start-------\n"); printf("Имя %s \n",rabotnik[i].name); printf("Отдел %d \n",rabotnik[i].nomer_otdela); printf("должность %s \n",rabotnik[i].doljnost); printf("Дата %s \n",rabotnik[i].data_rojd); printf("-------END-------\n"); fclose(data); getch(); }
Объяснение кода листинга программы
В этом коде:
- Объявлена структура SOTRUDNIK со полями name (имя), nomer_otdela (номер отдела), doljnost (должность) и data_rojd (дата рождения).
- В функции main() создается массив rabotnik[32] типа SOTRUDNIK и открывается файл
BASE2.DAT
для чтения и записи в режимеr+b
. - Затем выполняется цикл for от 0 до 31, в котором происходит чтение данных из файла в массив rabotnik с помощью функции fread().
- Для каждого элемента массива выводится информация на экран: имя, номер отдела, должность и дата рождения.
- После завершения цикла файл закрывается с помощью функции fclose().
- В конце программы вызывается функция getch() для получения нажатой клавиши. Список переменных и их значений:
- SOTRUDNIK rabotnik[32] - массив структур SOTRUDNIK размером 32.
- FILE *data - указатель на файл
BASE2.DAT
. - int i - переменная цикла for.
- char name[32], doljnost[22], data_rojd[8] - строки, содержащие имя, должность и дату рождения соответственно.
- int nomer_otdela - переменная, содержащая номер отдела.
- getch() - функция для получения нажатой клавиши.
- fopen(), fread(), fclose() - функции для работы с файлами.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д