如何将文件加载到linkedlist c编程
这只是我整个代码的一部分,所有功能都正常,保存功能正常,但是当我加载文件时,它只能从文件中检索1条记录,当我加载它并在没有文件的情况下保存时,它会首先在记录中创建空数据,我应该发送整个代码吗 对不起,我还是新来的,这就是为什么我只做我演讲中说的,她使用了fflush stdin,get之类的,我仍然不知道哪一个关键字更适合修改它。thx如何将文件加载到linkedlist c编程,c,file,linked-list,C,File,Linked List,这只是我整个代码的一部分,所有功能都正常,保存功能正常,但是当我加载文件时,它只能从文件中检索1条记录,当我加载它并在没有文件的情况下保存时,它会首先在记录中创建空数据,我应该发送整个代码吗 对不起,我还是新来的,这就是为什么我只做我演讲中说的,她使用了fflush stdin,get之类的,我仍然不知道哪一个关键字更适合修改它。thx void savefile() { FILE *fp; fp = fopen("airrecord.txt","w"); curr=start; while(c
void savefile()
{
FILE *fp;
fp = fopen("airrecord.txt","w");
curr=start;
while(curr)
{
fprintf(fp, "Booking ID = %10s\n",curr->booking_id);
fprintf(fp, "Seat Number = %10s\n",curr->seatno);
fprintf(fp, "Name = %10s\n",curr->name);
fprintf(fp, "Passport Number = %10s\n",curr->passno);
fputc('\n',fp);
curr=curr->next;
}
fclose(fp);
}
void loadfile()
{
FILE *fp =fopen("airrecord.txt","r");
int c;
while((c = getchar()) != EOF)
{
curr=start;
if(start==NULL)
{
start=curr=(struct passenger *)calloc(1, sizeof(struct passenger));
fscanf(fp, "Booking ID = %10s\n",curr->booking_id);
fscanf(fp, "Seat Number = %10s\n",curr->seatno);
fscanf(fp, "Name = %10s\n",curr->name);
fscanf(fp, "Passport Number = %10s\n",curr->passno);
curr->next=NULL;
break;
}
while(curr->next=NULL)
curr=curr->next;
curr->next=(struct passenger *)calloc(1, sizeof(struct passenger));
curr=curr->next;
fscanf(fp, "Booking ID = %10s\n",curr->booking_id);
fscanf(fp, "Seat Number = %10s\n",curr->seatno);
fscanf(fp, "Name = %10s\n",curr->name);
fscanf(fp, "Passport Number = %10s\n",curr->passno);
curr->next=NULL;
break;
}
fclose(fp);
}
int main()
{
FILE *fp;
void reserve_seat(), cancel_seat(), modify_seat(), display_layout(), exit();
int choice;
start=curr=NULL;
loadfile();
do
{
system("cls");
printf("\n\n*************************************************");
printf("\n\n**************AIRLINE RESERVATION MENU***********");
printf("\n\n*************************************************");
printf("\n\n* 1. Reserve seat\t\t\t\t*");
printf("\n\n* 2. Modify seat\t\t\t\t*");
printf("\n\n* 3. Cancel seat\t\t\t\t*");
printf("\n\n* 4. Display seat layout\t\t\t*");
printf("\n\n* 5. save and exit Exit\t\t\t\t\t*");
printf("\n\n*************************************************");
printf("\n\n\tEnter 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:
{
savefile();
break;
}
default:
printf("invalid choice!!, please try again");
}
getch();
}while (choice != 5);
}
loadfile()
函数中的if(start==NULL)
条件块末尾的break
语句将退出循环,因此您将只读取第一条记录
还请注意,
while(curr->next=NULL)
可能不是您想要的,您需要将=
替换为=加载文件()中if(start==NULL)
条件块末尾的break
语句
函数将退出循环,因此您将只读取第一条记录
另外请注意,while(curr->next=NULL)
可能不是您想要的,您需要将=
替换为=而不是break,我应该使用return吗?还是只删除break?我应该在curr->next=NULL中更改什么?很抱歉,在注释中无法教授C。我强烈建议您阅读或阅读一本好的C教程,以便更好地理解基本语言结构break
语句将终止最近的封闭循环的执行,该循环不是您想要的,因为您只想在读取整个文件后退出该循环。您应该将while(curr->next=NULL)
更改为while(curr->next==NULL)
,因为=
用于比较,而=
用于赋值。我应该使用return?而不是break,还是删除break?我应该在curr->next=NULL中更改什么?很抱歉,在注释中无法教授C。我强烈建议您阅读或阅读一本好的C教程,以便更好地理解基本语言结构break
语句将终止最近的封闭循环的执行,该循环不是您想要的,因为您只想在读取整个文件后退出该循环。您应该将while(curr->next=NULL)
更改为while(curr->next==NULL)
,因为=
用于比较,=
用于赋值。