Чтение из файла формата .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();
}

Объяснение кода листинга программы

В этом коде:

  1. Объявлена структура SOTRUDNIK со полями name (имя), nomer_otdela (номер отдела), doljnost (должность) и data_rojd (дата рождения).
  2. В функции main() создается массив rabotnik[32] типа SOTRUDNIK и открывается файл BASE2.DAT для чтения и записи в режиме r+b.
  3. Затем выполняется цикл for от 0 до 31, в котором происходит чтение данных из файла в массив rabotnik с помощью функции fread().
  4. Для каждого элемента массива выводится информация на экран: имя, номер отдела, должность и дата рождения.
  5. После завершения цикла файл закрывается с помощью функции fclose().
  6. В конце программы вызывается функция getch() для получения нажатой клавиши. Список переменных и их значений:
  7. SOTRUDNIK rabotnik[32] - массив структур SOTRUDNIK размером 32.
  8. FILE *data - указатель на файл BASE2.DAT.
  9. int i - переменная цикла for.
  10. char name[32], doljnost[22], data_rojd[8] - строки, содержащие имя, должность и дату рождения соответственно.
  11. int nomer_otdela - переменная, содержащая номер отдела.
  12. getch() - функция для получения нажатой клавиши.
  13. fopen(), fread(), fclose() - функции для работы с файлами.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5
Похожие ответы