Поиск в массиве структур которая находится в фаиле - 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);
    }

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

  1. Вначале объявляется указатель на файл - FILE * fp;
  2. Затем происходит попытка открыть файл info.dat в режиме записи - fp = fopen(info.dat,wb);
  3. Если файл не открылся, выводится сообщение об ошибке - if (fp == NULL) printf (Fail ne okrilsja);
  4. В противном случае, в файл записывается информация о количестве студентов - else printf (Vvedite 4islo studentov:); scanf(%d, &n);
  5. Далее, выделяется память под массив структур infouser - infouser* infouser_mas = new infouser[n];
  6. Затем, в цикле происходит заполнение массива структур infouser - for (int i = 0; i<n; i++)
  7. Выводится приглашение для ввода номера телефона - printf(\nEnter telefonnumber:);
  8. Происходит ввод номера телефона и сохранение его в соответствующем поле структуры - scanf(%d, &infouser_mas[i].telefonnumber);
  9. Выводится приглашение для ввода имени - printf(Enter name:);
  10. Происходит ввод имени и сохранение его в соответствующем поле структуры - gets(infouser_mas[i].name);
  11. Выводится приглашение для ввода адреса - printf(Enter adress:);
  12. Происходит ввод адреса и сохранение его в соответствующем поле структуры - gets(infouser_mas[i].adress);
  13. Затем, информация о студентах записывается в файл - fwrite(infouser_mas,sizeof(infouser),n,fp);
  14. Файл закрывается - fclose(fp);
  15. И, наконец, выводится сообщение об успешном выполнении программы - printf(\nData was written to the file successfully!);

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


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

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

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