我想在链表中显示座位的可用性,但我不知道chekcavailability()
中的逻辑不起作用。
第一个输入没问题,当我输入相同的值时,第二个输入显示座位已被占用并返回到特定功能。
但是当我再次输入可用的不同值时,它会给我一个错误。
请帮助谢谢。
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#define A 20
struct passenger
{
char name[20];
char booking_id[20];
char passno[20];
char seatno[20];
struct passenger *next;
}*start,*curr;
void datainput(), savefile(), loadfile(), checkavailability(), validationseat();
int main()
{
void reserve_seat(), cancel_seat(), modify_seat(), display_layout(), exit();
int choice;
start=curr=NULL;
do
{
system("cls");
printf("\n\n*************************************************");
printf("\n\n********AIRLINE RESERVATION MENU*****************");
printf("\n\n*************************************************");
printf("\n\n\t\t* 1. Reserve seat *");
printf("\n\n\t\t* 2. Modify seat *");
printf("\n\n\t\t* 3. Cancel seat *");
printf("\n\n\t\t* 4. Display seat layout*");
printf("\n\n\t\t* 5. Exit *");
printf("\n\n*************************************************");
printf("\n\n\n\n\t\t Enter your choice: ");
scanf("%d",&choice);fflush(stdin);
switch (choice)
{
case 1:
reserve_seat();
break;
case 2:
modify_seat();
break;
case 3:
cancel_seat();
break;
case 4:
display_layout();
break;
case 5:
{
exit();
break;
}
default:
printf("invalid choice!!, please try again");
}
getch();
}while (choice != 5);
}
void datainput()
{
printf("\n\t\t enter your booking ID: ");
gets(curr->booking_id); fflush(stdin);
printf("\n\t\t enter your seat number: ");
gets(curr->seatno); fflush(stdin);
printf("\n\t\t Enter Name: ");
gets(curr->name); fflush(stdin);
printf("\n\t\t Enter Passport Number: ");
gets(curr->passno); fflush(stdin);
}
void reserve_seat()
{
curr=start;
checkavailability();
if(start==NULL)
{
start=curr=(struct passenger *)malloc(sizeof(struct passenger));
datainput();
curr->next=NULL;
printf("\n\t data has been recorded");
return;
}
while(curr->next=NULL)
curr=curr->next;
curr->next=(struct passenger *)malloc(sizeof(struct passenger));
curr=curr->next;
datainput();
curr->next=NULL;
printf("\n\t data has been recorded");
void checkavailability()
{
int i;
char cmp3[20];
printf("select your seat(1-20)");
gets(cmp3);fflush(stdin);
while(curr)
{
if (strcmp(curr->seatno, cmp3)==0)
{
printf("Seat has been taken\n");
checkavailability();
}
else
{
break;
}
}
printf("seat available");
return;
}
答案 0 :(得分:1)
你的代码有很多错误,最糟糕的是他无法编译(除非conio声明没有参数的退出函数)。
首先,您需要激活一个合适的编译器选项。至少-Wall -Wextra(取决于编译器)。
在主要功能中,这:exit();
退出函数需要一个参数。解决了这个问题。
modify_seat();
cancel_seat();
display_layout();
这些功能未实现,因此您不应该对它们进行调用。解决这个问题。
不要使用获取!这是危险和不安全的。 不要fflush(stdin)!这是未定义的行为。
“A”定义是无用的,并不是真正明确的。应该是什么? “阵列”?
为了您的安全,请尝试不使用全局变量。 我建议定义一个结构并在main中声明一个变量。
在“reserve_seat”中: 而(curr-&gt;接着= NULL)
你在这里犯了一个错误:它是一会儿(curr-&gt; next!= NULL) 你为curr-> gt分配了NULL,也许这就是你的链表被破坏的原因。
嗯,这对我来说是一个肮脏的代码,因为它严重缺乏严格的编码。 例如,检查函数调用是否失败(如malloc)。 我建议你重写代码。