Поиск в массиве структур которая находится в фаиле - 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!
);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д