Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将文件加载到linkedlist c编程_C_File_Linked List - Fatal编程技术网

如何将文件加载到linkedlist c编程

如何将文件加载到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

这只是我整个代码的一部分,所有功能都正常,保存功能正常,但是当我加载文件时,它只能从文件中检索1条记录,当我加载它并在没有文件的情况下保存时,它会首先在记录中创建空数据,我应该发送整个代码吗

对不起,我还是新来的,这就是为什么我只做我演讲中说的,她使用了fflush stdin,get之类的,我仍然不知道哪一个关键字更适合修改它。thx

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)
,因为
=
用于比较,
=
用于赋值。