Отображается только одно бронирование отеля - PullRequest
1 голос
/ 22 мая 2019

Я делаю бронирование в отеле, поэтому я пытаюсь отобразить бронирование с помощью идентификатора, который вставил пользователь, но я не могу его получить, программа просто зависает без ошибок или чего-либо, что я пробовал много раз и смотрел онлайн, мог не найти ответ. я попытался сделать некоторое время внутри цикла if, он также не работал, не могу понять, где проблема. Благодарю.

void display(char *a)
{
    FILE *fp;
    rec = count;
    int choice;
    fp = fopen(a ,"r");
    struct  hotelStruct *temp = (struct hotelStruct *)malloc(sizeof(struct hotelStruct));
    temp->first_name = (char *)malloc(10* sizeof(char));
    temp->last_name = (char *)malloc(15*sizeof(char));
    temp->passport = (char *)malloc(15*sizeof(char));
    temp->nationality = (char *)malloc(30*sizeof(char));
    temp->room = (char *)malloc(10*sizeof(char));
    temp->email = (char *)malloc(30*sizeof(char));
    if (fp == NULL)
        printf("Error!!");
    printf("\nEnter your Reservations iD:\n");
    scanf("%d", &choice);
    fseek(fp, 0, 0);

    while (rec)
    {


        if (choice == temp->id) {
            fread(&temp->id, sizeof(int), 1, fp);
            printf("\niD: %d\n", temp->id);

            fread(temp->first_name, 10, 1, fp);
            printf("First Name: %s\n", temp->first_name);

            fread(temp->last_name, 15, 1, fp);
            printf("Last name: %s\n", temp->last_name);

            fread(temp->passport, 15, 1, fp);
            printf("Passport: %s\n", temp->passport);

            fread(temp->nationality, 30, 1, fp);
            printf("Nationality: %s\n", temp->nationality);

            fread(temp->room, 10, 1, fp);
            printf("Room: %s\n", temp->room);

            fread(&temp->bed, sizeof(int), 1, fp);
            printf("Beds: %d\n", temp->bed);

            fread(temp->email, 30, 1, fp);
            printf("Email: %s\n", temp->email);

            fread(&temp->phone_number, sizeof(int), 1, fp);
            printf("Phone number: %d\n\n\n", temp->phone_number);
        }
        rec--;
    }
    fclose(fp);
    free(temp);
    free(temp->first_name);
    free(temp->last_name);
    free(temp->passport);
    free(temp->room);
    free(temp->email);
    free(temp->nationality);
}

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Ваш счет и запись не определены, и поскольку они не были инициализированы.

Сначала прочтите Id, прежде чем сравнивать его.

 fread(&temp->id, sizeof(int), 1, fp); 
  printf("\niD: %d\n", temp->id);
  if (choice == temp->id) {

}
0 голосов
/ 22 мая 2019

В начале вашей функции вы инициализируете rec = count - но в этот момент count не определено (насколько это можно определить, поскольку вы не предоставили полный код - они обе являются глобальными переменными?) .

Кроме того, вы читаете из stdin для некоторых частей, но из открытого дескриптора файла (fp) для других - но между ними нет никакой связи.

Пожалуйста, переосмыслите свой пример и обновите пост - структура сбивает с толку и отсутствуют существенные детали.

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