Я новичок в программировании и хотел бы получить помощь по файлу в 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.