我正在进行酒店预订,因此我试图使用用户插入的iD显示预订,但我无法获得它,程序只是冻结而没有错误,或者我尝试了很多事情并在网上看了可以找不到答案。我试图在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);
}
答案 0 :(得分:0)
在函数开始时,您初始化rec = count
-但此时count
是未定义的(据可以确定,因为您没有提供完整的代码-它们都是全局变量?)。
此外,您将从stdin中读取某些部分,但从其他部分中从打开的文件描述符(fp
)中读取-但它们之间没有关联。
请重新考虑您的示例并更新文章-结构令人困惑,并且缺少重要细节。
答案 1 :(得分:0)
您的count和rec是未定义的,因为它们尚未初始化。
在比较之前先阅读ID。
fread(&temp->id, sizeof(int), 1, fp);
printf("\niD: %d\n", temp->id);
if (choice == temp->id) {
}