Чтение из файла формата .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() - функции для работы с файлами.