Как получить структуру из файла в C - PullRequest
0 голосов
/ 05 апреля 2020

Я новичок в программировании и хотел бы получить помощь по файлу в C. Это мой код

#include <stdio.h>
#include <string.h>
void read_file();
void write_fil();
void add();
void display();
void search();

#define NAME_CHRS 30
struct employee_rec
{  char name[NAME_CHRS];
   int dependents;
   float pay_rate;
};
struct employee_rec employee;
struct employee_rec emp_array[];
FILE *employ;
int count=-1;

void read_file(void)
{
  int idx;
    employ = fopen("EMPLOYEE.DAT", "a+");//i add
  //for (idx=0; idx <= count; idx++)
    fread(&emp_array[idx], sizeof emp_array[idx], 1, employ);
  fclose(employ);
}

void write_file()
{
  int x;
  employ = fopen("EMPLOYEE.DAT", "a+");
  for (x=0; x <= count; x++)
    fwrite(&emp_array[x], sizeof emp_array[x], 1, employ);
  fclose(employ);
}

void add()
{
  count+=1;
  printf("Enter name: ");
  scanf("%s", emp_array[count].name);
  printf("Pay rate, other dependents: ");
  scanf("%f %i", &emp_array[count].pay_rate, &emp_array[count].dependents);
}

void display()
{
  int idx;
  read_file();
  printf("Name\t\tPay Rate\tDependents\n");
  printf("----\t\t--------\t----------\n");  
  for (idx=0; idx <= count; idx++)
  {
    printf("%-10s\t%-8g\t%-8d\n", emp_array[idx].name, emp_array[idx].pay_rate, emp_array[idx].dependents);
  }
}

void search()
{
  char target[20];
  int idx, found=0;
  printf("Enter a name to search: ");
  scanf("%s", target);
  for (idx=0; idx <= count; idx++){
     if(strcmp(emp_array[idx].name, target) == 0)
     {
        found = 1;
        break;
     }
  }
  if(found == 1)
  {
     printf("Name:        %s\n", emp_array[idx].name);
     printf("Pay rate:    %g\n", emp_array[idx].pay_rate);
     printf("Dependents:  %d\n", emp_array[idx].dependents);
  }
  else
    printf("Not found!\n");
} 
int main(void)
{  
  int i;
 //for (i=0; i < 3; i++)
//     add();
 // write_file();
  display();
  search();
  return 0;
}

Оригинальная программа попросила бы пользователя ввести данные и затем отобразить их для пользователя. Поэтому, когда другой пользователь запускает программу и имеет файл, ему не нужно добавлять больше данных, а просто читать из файла, который я прокомментировал для l oop, отображать и искать в моем главном, потому что я просто хочу получить данные из моего файл.

Я не уверен, что делать с

    fread(&emp_array[idx], sizeof emp_array[idx], 1, employ);
  fclose(employ);

Поскольку сейчас я использую счетчик из вставки, чтобы получить размер, он скажет, что размер равен 0, так как текущий прогон сделал не вводить данные в файл (файл уже содержит данные). Есть ли другой способ получить все мои данные из файла, не вставляя их в тот же прогон?

РЕДАКТИРОВАТЬ: Так как некоторые комментарии упоминали, что размер emp_arry пуст. Я хотел бы получить размер из файла. Поскольку файл в виде массива, внутри которого я хочу передать данные в emp_array.

1 Ответ

0 голосов
/ 05 апреля 2020

Одним из простых решений является создание заголовка файла, который включает количество данных в этом файле. Затем вы можете сначала прочитать заголовок файла, чтобы получить номер, а затем динамически выделить память для чтения данных из файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...