user-0 提问: c语言航班设计

回复:
user: user-1
content: 有时间再看一看。。。。。。。。。。。。。。

user: user-2
content: 你的两个if没太看懂 修改了一下经过调试后发现问题应该在fp = fopen("yu.txt", "rb");    r的意思是只读，要求文件必须是存在的，检查一下你的yu.txt文件是否存在 fp = fopen("yu.txt", "rb"); 		fp1 = fopen("yi.txt", "wb"); 		if ((fp  == NULL) || (fp1== NULL)) 			read();  wb是以二进制进行写，如果yi.txt不存在则会自动创建

user: user-3
content: 楼主自己单步调试一下就知道了。 你输入1那么跳到input函数里执行，因为这句if((fp1=fopen("yi.txt","wb"))==NULL);所以会生成yi.txt 并且进入read()函数，在read函数里if((fp1=fopen("yi.txt","rb"))==NULL)这句是能打开的，但是里面是没有内容的 你执行fscanf(fp1,"%d",&count);自然就报错了 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0
content: #include<stdio.h>  //标准输入、输出头文件 #include<string.h>    //包含字符串函数处理头文件 #include<stdlib.h>     //包含动态存储与释放函数头文件 #define N 1000 #define PRINT "%s%12s%12s%12s%12d\n",flight[i].flightNo,flight[i].start,flight[i].end,flight[i].day,flight[i].flightcount    //定义输出格式  struct plane         //定义结构体数组 {    char flightNo[10];    char start[10];    char end[10];    char day[10];    int flightcount;  }flight[N];//定义结构体  int i;//定义整数变量 int count=0;  void input();    //输入航班信息 void print();    //输出航班信息 void save();     //保存航班信息 void read();     //读取航班信息 void search();   //查找航班信息 void main()  {     int option;     printf("                             欢迎进入航班管理系统！          \n");     printf("================================================================================\n");     do     {         printf("                                1.输入航班信息                     \n\n" 	  "                                2.浏览航班信息                          \n\n"       "                                3.查找航班信息                          \n\n"       "                                0.退出                                  \n\n");       printf("================================================================================\n");        printf("请在0-3中选择以回车键结束：\n\n");        scanf("%d",&option);      switch(option)     {          case 1: input();break;//调用输入模块          case 2:print();break;//调用显示模块          case 3:search();break;//调用查找模块          case 0:;break;}     }while(option!=0);     //判断结束      printf("谢谢使用，再见！\n");   }//主函数结束   void input()//输入模块程序 {     FILE *fp,*fp1;//定义文件指针     char password[]="0101";    //设置密码     int y;     printf("请输入密码并以回车键结束:\n\n");     scanf("%s",password);          //读取密码      if(strcmp(password,"0101")!=0) 	  printf("输入密码错误!请检查您的密码是否正确!谢谢!再见!\n\n"); 	else	           {             if((fp=fopen("yu.txt","rb"))==NULL);             if((fp1=fopen("yi.txt","wb"))==NULL);             else read();             printf("请依次输入航班信息:\n");      //打印提示信息             printf("\n--------------------------------------------------------------------------\n");             for(i=count;i<N;i++)                 {                     printf("请输入航班号:\n");                     scanf("%s",&flight[i].flightNo);     //读取航班号                     printf("请输入起始站:\n");                     scanf("%s",&flight[i].start);//读取起始站                     printf("请输入终点站:\n");                     scanf("%s",flight[i].end);//读取终点站                     printf("请输入时间:\n");                     scanf("%s",flight[i].day);//读取时间                     printf("请输入机票数:\n",count);                     scanf("%d",&flight[i].flightcount);//读取机票数                     count++;                     printf("第%d个信息已经输完是否继续?按任意键继续，按0结束",count);                     scanf("%d",&y);//表示状态，是否结束                     if(y==0)                          {                               save();//将结构体信息存盘                               print();//输出输入的航班信息                               break;                          }                 }         }     }   void save()//保存模块程序 {    FILE *fp,*fp1;//定义文件指针    if((fp=fopen("yu.txt","wb"))==NULL)//打开文件并判断是否出错       {           printf("创建文件失败!\n\n");//打印出错提示           getchar();           return;       }     if((fp1=fopen("yi.txt","wb"))==NULL)//打开文件并判断是否出错       {           printf("创建文件失败!\n\n");//打印出错提示           getchar();           return;       }     for(i=0;i<count;i++) 	  if(fwrite(&flight[i],sizeof(struct plane),1,fp)==0)//向文件写入数据，并判断是否出错     printf("向文件输入数据失败!\n\n");    fprintf(fp1,"%d",count);    fclose(fp);//关闭文件    fclose(fp1);//关闭文件 }   void read()//从文件读取信息模块 {        FILE *fp,*fp1;//定义文件指针        if((fp=fopen("yu.txt","rb"))==NULL)//打开文件，并判断是否出错             {                 printf("出错，请检查文件是否存在，按任意键返回主菜单");//打印出错提示                 getchar();             }         if((fp1=fopen("yi.txt","rb"))==NULL)//打开文件并判断是否出错             {                 printf("打开文件失败!\n\n");//打印出错提示                 getchar();                 return;             }         fscanf(fp1,"%d",&count);        fclose(fp1);//关闭文件        for(i=0;i<count;i++)             {                 fread(&flight[i],sizeof(struct plane),1,fp);//从文件中读取信息             }        fclose(fp);//关闭文件 }   void print()//打印模块 {     char w[10];     read();//调用读取文件函数     printf("航班号       起始站      终点站    时间       机票数\n");     for(i=0;i<count;i++)       {           printf(PRINT);//打印信息       }     printf("请按任意键和回车键结束返回上层菜单:\n");     scanf("%s",w); }   void search()//查询模块 {  char name1[20];//定义字符串  char name2[20];  char judgement[10];  int n;//定义整型变量  char no[10];  do   {       printf("请选择查找方式：\n\n");//打印查询方式菜单       printf("1.按航班号查找\n\n"              "2.按终点站查找\n\n"              "3.按航线查找\n\n"              "0.返回\n\n");       printf("请在0-3中选择：\n\n"            "按其他键和回车键结束返回主菜单:\n\n");       scanf("%d",&n);//读取查找方式       if(n==0)//判断退出       break;       switch(n)          {             case 1:             printf("请输入航班号：\n");             scanf("%s",no);//航班号             break;             case 2:             printf("请输入终点站名称：\n");             scanf("%s",name2);//读取终点站             break;             case 3:             printf("请输入起始站名称：\n");             scanf("%s",name1);//读取起始站             printf("请输入终点站名称：\n");             scanf("%s",name2);//终点站             break;          }      read();//调用读取函数      for(i=0;i<count;i++)        {           if(strcmp(flight[i].end,name1)==0||strcmp(flight[i].end,name2)==0)//按终点站起始站判断输出条件                 {                     printf("\n查找航班信息成功!\n");                     printf("航班号       起始站      终点站    时间       机票数\n");                     printf(PRINT);//打印信息                     break;                 }           if(strcmp(flight[i].flightNo,no)==0)//按航班号判断输出条件                 {                     printf("\n查找航班信息成功!\n");                     printf("航班号       起始站      终点站    时间       机票数\n");                     printf(PRINT);//打印信息                     break;                 }       }       printf("没有您需要的信息或查找完毕：\n\n"          "是否继续查找?请键入Y(继续查找)或N（返回主菜单）以回车键结束\n");      scanf("%s",judgement);   }while(strcmp(judgement,"Y")==0);//判断结束 }