【问题标题】:How to load file to linkedlist c programming如何将文件加载到链表 c 编程
【发布时间】:2016-06-09 10:13:32
【问题描述】:

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

对不起,我还是新手,这就是为什么我只做我的讲座所说的,她使用 fflush stdin,gets 和东西,我仍然不知道哪个是更好的关键字来改变它。谢谢

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);

}

【问题讨论】:

    标签: c file linked-list


    【解决方案1】:

    loadfile() 函数内if(start==NULL) 条件块末尾的break 语句将退出循环,因此您将只读取第一条记录。

    还要注意while(curr->next=NULL) 可能不是您想要的,您需要将= 替换为==

    【讨论】:

    • 我应该使用 return 而不是 break?还是只删除 break?
    • 我应该在 curr->next=null 中改变什么?
    • 很抱歉,在 cmets 中教 C 是不可能的。我强烈建议您阅读K&R 或阅读好的 C 教程以更好地理解基本语言结构。 break 语句将终止最近的封闭循环的执行,这不是您想要的,因为您只想在读取整个文件后退出循环。您应该将while(curr->next=NULL) 更改为while(curr->next==NULL),因为== 用于比较,= 用于分配。
    猜你喜欢
    • 2017-10-30
    • 2022-01-21
    • 1970-01-01
    • 2013-05-25
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    相关资源
    最近更新 更多