为什么只能录入一条航班的信息?

问题遇到的现象和发生背景

输入多条信息,只有第一条被录入

问题相关代码,请勿粘贴截图

```c
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#define N 1000
/*定义一个结构体*/ 
struct air 
{
    char fightNO[10];     //航班号
    char start[10];    //起始站
    char end[10];      //终点站
    char day[10];      //飞行时间
    char totalTicket[10];     //预售票数
    char sellTicket[10];      //已售票数
}Flight[N];       
/*定义各函数*/
void menu();   //菜单
void save(int);  //保存
int load();  /*导入函数*/ 
void display();   //浏览 
void add();      //添加
void search();   //查询
void search_fightNO();  //按航班号查
void search_start();  //按起始站查
void search_end();  //按终点站查
void search_day();  //按时间查
void modify();     //修改

void main()
{  
        
    int n;   
    char a;
    menu();   //调用菜单函数
    printf("请选择你需要操作的步骤(1--5):\n");  
    scanf("%d",&n);  
    while(n<1&&n>5) 
    {
        printf("您输入有误,请重新选择!"); 
        scanf("%d",&n);  
            
    } 
    while(1)
    {
        switch(n)  
        {  
        case 1:
            printf("             ◆◆◆添加航班信息◆◆◆\n");
            printf("\n");
            add();
            break;         
        case 2:
            printf("             ◆◆◆浏览航班信息◆◆◆\n");
            printf("\n");
            display();
            break;        
        case 3:
            printf("             ◆◆◆按航班号查询航班信息◆◆◆\n");
            printf("\n");
            search();
            break;        
        case 4:
            printf("             ◆◆◆修改航班信息◆◆◆\n");
            printf("\n");
            modify();
            break;        
        case 5:
            exit(0);
            break;      
        default :
            break;
        } 
        getchar();   
        printf("\n");  
        printf("是否继续进行(y or n):\n"); 
        scanf("%c",&a); 
        if(a=='y') 
        {  
            system("cls");
            /*清屏*/   
            menu();
            /*调用菜单函数*/   
            printf("请再次选择你需要操作的步骤(1--5):\n");  
            scanf("%d",&n);    
            printf("\n"); 
        }   
        else
        {
            exit(0);
        }
    }
    
}


 
void menu()   /*菜单函数*/
{
    printf("        ************欢迎进入航班信息管理系统**********\n"); 
    printf("           1.添加航班信息");
    printf("           2.浏览航班信息\n");  
    printf("           3.查询航班信息");   
    printf("           4.修改航班信息\n");  
    printf("           5.退出\n");   
    printf("        ********************谢谢使用******************\n"); 
    printf("\n");  printf("\n");   
}  

void save(int m)  /*保存文件函数*/ 
{
    int i;   
    FILE*fp;   
    fp=fopen("Hangban.txt","wb");
    for(i=0;i<m;i++) /*将内存中航班的信息输出到磁盘文件中去*/
    {
        if(fwrite(&Flight[i],sizeof(struct air),1,fp)!=1)
            printf("file write error\n");
        fclose(fp);
    }
} 

 
int load()        /*导入+测长度函数*/ 
{ 
    FILE*fp;   
    int i=0;  
    if((fp=fopen("Hangban.txt","rb"))==NULL)/*判断是否能打开*/  
    { 
          return 0;
    }   
    else  
    {  
        do   
        {  
            fread(&Flight[i],sizeof(struct air),1,fp);     //读文件到数组 
            i++;             
        }      
        while(feof(fp)==0);   //判断文件是否读完
    }      
    fclose(fp);   //关文件操作
    return(i-1);   //返回文件长度
}

  
void display()  /*浏览函数*/
{
    int i;  
    int m=load();
    for(i=0;i<m;i++)
    {
       printf("\t\t航班号\t\t起始站\t\t终点站\t\t飞行时间\t\t预售票数\t\t已售票数\n");
       printf("\t\t%s\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t\t%s\n",Flight[i].fightNO,Flight[i].start,Flight[i].end,Flight[i].day,Flight[i]. totalTicket,Flight[i].sellTicket);
       printf("\n");
       printf("\n");
    }
}

 
void add()/*添加函数*/
{
    FILE *fp;
    int n; /*增加航班的个数*/    
    int i;     
    int m=load();/*定义一个变量接受函数的返回值*/   
    printf("请输入想增加的航班个数:\n");
    scanf("%d",&n);    
    for (i=m;i<(m+n);i++) /*从第m个数组开始,继续填充数组数据*/ 
    {
        printf("\n 请输入新增加航班的信息:\n");  
        printf("请输入航班号:  ");   
        scanf("%s",&Flight[i].fightNO);     
        printf("请输入起始站:  ");   
        scanf("%s",Flight[i].start);     
        printf("请输入终点站:  ");
        scanf("%s",&Flight[i].end);
        printf("请输入飞行时间:  ");  
        scanf("%s",&Flight[i].day);  
        printf("请输入预售票数:  ");   
        scanf("%s",Flight[i]. totalTicket); 
        printf("请输入已售票数:  ");   
        scanf("%s",Flight[i].sellTicket); 
        printf("\n");   
    }   
    printf("\n添加完毕!\n"); 
    m=m+n; /*总航班数*/       
    save(m);/*将得到的航班数返回到文本中*/  
} 

void search()/*查询函数*/
{  
    int t; 
    printf("\n1:按航班号查询请按     2:按起始站查询请按     3:按终点站查询请按    4:按时间查询请按\n"); 
    scanf("%d",&t);  
    while(t>2&&t<1)/*输入的t必须是1或者2*/   
    {
        printf("输入出错,请从新输入:\n");
        scanf("%d",&t);
    }            
     switch(t) 
    {   
        case 1:
            printf("按职学号查询\n");
            search_fightNO();
            break;    
        case 2:
            printf("按起始站查询\n");
            search_start();
            break;
        case 3:
            printf("按起始站查询\n");
            search_end();
            break;  
        case 4:
            printf("按起始站查询\n");
            search_day();
            break;  
        default:break;  
        } 
    
} 
void search_fightNO()   //按航班号查询函数
{ 
    char fightNO[20];  
    int i,t,k=0;   
    int m=load();/*把文本里面的所有数据读出*/ 
    printf("请输入要查找的航班号:\n");  
    scanf("%d",&fightNO); 
    for(i=0;i<m;i++) 
        if(strcmp(fightNO,Flight[i].fightNO))/*比较输入的和文本里面的字符串*/ 
        { 
            printf("\n已找到,其记录为:\n");
            printf("\t\t航班号\t\t起始站\t\t终点站\t\t飞行时间\t\t预售票数\t\t 已售票数\n");
            printf("\t\t%s\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t\t%s\n",Flight[i].fightNO,Flight[i].start,Flight[i].end,Flight[i].day,Flight[i]. totalTicket,Flight[i].sellTicket);
            k=1;
        }     
        if(k==0)  
            printf("\n对不起,查无此航班\n");  
        printf("\n");   
        printf("继续查询请按1,结束查询请按2\n"); 
        scanf("%d",&t);  
        switch(t)
            { 
        case 1:
            search();
            break;   
        case 2: 
            break;

        default:break;  
        }
} 
void search_start()   //按起始站查询
{
    char start[10];
    int i,t,k=0;  
    int m=load();   
    printf("请输入要查找的起始站:\n");  
    scanf("%s",start); 
    for(i=0;i<m;i++)   
        if(strcmp(Flight[i].start,start)==0) 
        { 
            printf("\n已找到,其记录为:\n");
            printf("\t\t航班号\t\t起始站\t\t终点站\t\t飞行时间\t\t预售票数\t\t已售票数 \n");
            printf("\t\t%s\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t\t%s\n",Flight[i].fightNO,Flight[i].start,Flight[i].end,Flight[i].day,Flight[i]. totalTicket,Flight[i].sellTicket);
            k=1;                        
        }     
        if(k==0) /*记录航班存不存在*/
        {
            printf("\n对不起,查无此航班\n");  
            printf("\n");   
            printf("继续查询请按1,结束查询请按2\n"); 
            scanf("%d",&t);  
            switch(t)
            {
            case 1:
                search();
                break;   
            case 2: 
                break;
            default:
                break;  
            }
        }
}
void search_end()   //按终点站查询
{
    char end[10];
    int i,t,k=0;  
    int m=load();   
    printf("请输入要查找的终点站:\n");  
    scanf("%s",end); 
    for(i=0;i<m;i++)   
        if(strcmp(Flight[i].end,end)==0) 
        { 
            printf("\n已找到,其记录为:\n");
            printf("\t\t航班号\t\t起始站\t\t终点站\t\t飞行时间\t\t预售票数\t\t已售票数 \n");
            printf("\t\t%s\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t\t%s\n",Flight[i].fightNO,Flight[i].start,Flight[i].end,Flight[i].day,Flight[i]. totalTicket,Flight[i].sellTicket);
            k=1;                        
        }     
        if(k==0) /*记录航班存不存在*/
        {
            printf("\n对不起,查无此航班\n");  
            printf("\n");   
            printf("继续查询请按1,结束查询请按2\n"); 
            scanf("%d",&t);  
            switch(t)
            {
            case 1:
                search();
                break;   
            case 2: 
                break;
            default:
                break;  
            }
        }
}
void search_day()   //按时间查询
{
    char day[10];
    int i,t,k=0;  
    int m=load();   
    printf("请输入要查找的起始站:\n");  
    scanf("%s",day); 
    for(i=0;i<m;i++)   
        if(strcmp(Flight[i].day,day)==0) 
        { 
            printf("\n已找到,其记录为:\n");
            printf("\t\t航班号\t\t起始站\t\t终点站\t\t飞行时间\t\t预售票数\t\t已售票数 \n");
            printf("\t\t%s\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t\t%s\n",Flight[i].fightNO,Flight[i].start,Flight[i].end,Flight[i].day,Flight[i]. totalTicket,Flight[i].sellTicket);
            k=1;                        
        }     
        if(k==0) /*记录航班存不存在*/
        {
            printf("\n对不起,查无此航班\n");  
            printf("\n");   
            printf("继续查询请按1,结束查询请按2\n"); 
            scanf("%d",&t);  
            switch(t)
            {
            case 1:
                search();
                break;   
            case 2: 
                break;
            default:
                break;  
            }
        }
}


  
void modify() /*修改函数*/
{ 
    char fightNO[20];   
    char start[10];   
    char end[2];     
    char day[5];     
    char  totalTicket[20]; 
    char sellTicket[20];
    int c,i,t,flag;  
    int m=load();    
    printf("\n 原来的航班信息:\n"); 
    display();   
    printf("\n"); 
    printf("请输入要修改的航班的起始站:\n"); 
    scanf("%s",start); 
     for(flag=1,i=0;flag&&i<m;i++) 
     { 
         if(strcmp(Flight[i].start,start)==0)
           { 
               printf("\n已找到此航班,原始记录为:\n");    
               
               printf("\t\t航班号\t\t起始站\t\t终点站\t\t飞行时间\t\t预售票数\t\t已售票数 \n");
               printf("\t\t%s\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t\t%s\n",Flight[i].fightNO,Flight[i].start,Flight[i].end,Flight[i].day,Flight[i]. totalTicket,Flight[i].sellTicket);
               printf("\n需要进行修改的选项\n 1.航班号 2.起始站 3.终点站 4.飞行时间 5.预售票数  6. 已售票数\n");         
               printf("请输入你想修改的那一项序号:\n");           
               scanf("%d",&c);             
               while(c>6||c<1)
               {
                   printf("\n选择错误,请重新选择!\n");
                   scanf("%d",&c);
               }
                          
               flag=0;  
         }         
     }  
     if(flag==1)
     {
         printf("\n对不起,查无此航班!\n");
     }
      if(flag==0)   
     {
         switch(c)      /*因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个航班*/  
         { 
         case 1:printf("航班号改为: ");   
             scanf("%s",fightNO);    
             strcpy(Flight[i-1].fightNO,fightNO);      
             break;         
         case 2:printf("起始站改为: ");  
             scanf("%s",start);       
             strcpy(Flight[i-1].start,start);      
             break;            
         case 3:
             printf("终点站改为: "); 
              scanf("%s",end);     
              strcpy(Flight[i-1].end,end); 
               break;    
         case 4:
             printf("飞行时间改为: ");   
             scanf("%s",day);    
             strcpy(Flight[i-1].day,day);        
             break;       
         case 5:printf("预售票数改为: ");    
             scanf("%s", totalTicket);      
             strcpy(Flight[i-1]. totalTicket, totalTicket);    
             break;  
        case 6:printf("已售票数改为: ");    
             scanf("%s",sellTicket);      
             strcpy(Flight[i-1].sellTicket,sellTicket);    
             break;  
         }    
        printf("修改成功\n");
     }      
     save(m);    
     printf("\n继续修改请按1,不再修改请按2\n");  
     scanf("%d",&t);   
     switch(t)   
     { 
     case 1:modify();
         break;  
     case 2:
         break;  
     default :break;
     } 
}


运行结果及报错内容

选择1.添加航班信息,输入多条时,只有第一条会被录入
会输出“file write error”

我的解答思路和尝试过的方法
我想要达到的结果

可以正常的录入


void save(int m)  /*保存文件函数*/
{
    int i;
    FILE* fp;
    fp = fopen("Hangban.txt", "wb");
    for (i = 0; i < m; i++) /*将内存中航班的信息输出到磁盘文件中去*/
    {
        if (fwrite(&Flight[i], sizeof(struct air), 1, fp) != 1)
            printf("file write error\n");
    }
    fclose(fp);
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^