Поиск в массиве структур которая находится в фаиле - C (СИ)
Формулировка задачи:
Добрый день.
Не могу организовать поиск в фаиле .
Есть фаил с расширением дат в него я ввожу 1 или несколько структур далее мне надо в этом фаиле организовать поиск по имени и вывод номера телефона..
Вот код функции поиска подскажите что я делаю не так.
FILE *fp;
fp= fopen("date.dat","rb");
if (fp == NULL)
printf("Fail not open");
else
{
char searchname[10];
char findname[10];
int fsize;
fseek(fp,0,SEEK_END);
fsize = ftell(fp);
int n = fsize / sizeof(infouser);
cout << n <<endl;
infouser* infouser_mas = new infouser[n];
fseek(fp,0,SEEK_SET);
fread(&infouser_mas,sizeof(infouser),n,fp);
printf("Enter user name: ");
gets(searchname);
bool r;
for (int i = 0; i<n ; i++)
{
if ( strcmp (infouser_mas[i].name, searchname)==0){
cout << "\nUser name: " << infouser_mas[i].name <<" -> " << infouser_mas[i].telefonnumber << endl;
r=true;
}
}
if ( r == false)
{
cout << "No user find!";
}
}
fclose(fp);Решение задачи: «Поиск в массиве структур которая находится в фаиле»
textual
Листинг программы
FILE * fp;
fp = fopen("info.dat","wb");
if (fp == NULL)
printf ("Fail ne okrilsja");
else
{
int n;
printf ("Vvedite 4islo studentov: ");
scanf("%d", &n);
infouser* infouser_mas = new infouser[n];
for (int i = 0; i<n; i++)
{
printf("\nEnter telefonnumber: ");
scanf("%d", &infouser_mas[i].telefonnumber);
getchar();
printf("Enter name: ");
gets(infouser_mas[i].name);
printf("Enter adress: ");
gets(infouser_mas[i].adress);
}
fwrite(infouser_mas,sizeof(infouser),n,fp);
fclose(fp);
}
Объяснение кода листинга программы
- Вначале объявляется указатель на файл - FILE * fp;
- Затем происходит попытка открыть файл
info.datв режиме записи - fp = fopen(info.dat,wb); - Если файл не открылся, выводится сообщение об ошибке - if (fp == NULL) printf (
Fail ne okrilsja); - В противном случае, в файл записывается информация о количестве студентов - else printf (
Vvedite 4islo studentov:); scanf(%d, &n); - Далее, выделяется память под массив структур infouser - infouser* infouser_mas = new infouser[n];
- Затем, в цикле происходит заполнение массива структур infouser - for (int i = 0; i<n; i++)
- Выводится приглашение для ввода номера телефона - printf(
\nEnter telefonnumber:); - Происходит ввод номера телефона и сохранение его в соответствующем поле структуры - scanf(
%d, &infouser_mas[i].telefonnumber); - Выводится приглашение для ввода имени - printf(
Enter name:); - Происходит ввод имени и сохранение его в соответствующем поле структуры - gets(infouser_mas[i].name);
- Выводится приглашение для ввода адреса - printf(
Enter adress:); - Происходит ввод адреса и сохранение его в соответствующем поле структуры - gets(infouser_mas[i].adress);
- Затем, информация о студентах записывается в файл - fwrite(infouser_mas,sizeof(infouser),n,fp);
- Файл закрывается - fclose(fp);
- И, наконец, выводится сообщение об успешном выполнении программы - printf(
\nData was written to the file successfully!);