###### 问题遇到的现象和发生背景
文件创建失败而且不输出菜单
###### 问题相关代码,请勿粘贴截图
```c
#include<stdio.h> //标准输入、输出头文件
#include<string.h> //包含字符串函数处理头文件
#define N 9999 //定义最多的航班数
#define PRINT "%s\t\t%s\t\t%s\t\t%f\t\t%d\t\t%d\n ",s[i].flightNO/*航班号*/,s[i].start/*起始站*/,s[i].end/*终点站*/,s[i].day/*时间*/,s[i].totalTicket /*预售票总数*/,s[i].sellTicket;/*已售票数*/ //宏定义输出格式
struct air //定义结构体数组
{
char flightNO; //定义航班号
char start[20]; //航班起始站
char end[20]; //终点站
float day; //飞行时间
int totalTicket; //预售票总数
int sellTicket; //已售票总数
}s[N];
int i,m=0;
int fclose(FILE *fp); //定义全局变量
char flightNO[10];
void add(); //函数声明增加航班信息函数
void print(); //显示航班信息
void search(); //查找航班信息
void read(); //读取文件
void save(); //保存文件
void output(); //输出格式
void build(); //建立数据文件
void main() //主函数
{
int j;
read();
printf("\n\t欢迎使用航班订票系统!\n");
printf("*********************************************\n");
printf(" 1.增加航班信息\n");
printf(" 2.浏览航班信息\n");
printf(" 3.查找航班信息\n");
printf(" 0.退出系统(exit)\n");
printf("*********************************************\n");
printf("请在0-6中选择以回车键结束: ");
scanf("%d",&j);
switch(j)
{
case 1:
add(); //调用增加航班函数
break;
case 2:
print(); //调用显示模块
break;
case 3:
search(); //调用查找模块
break;
case 0:
save(); //退出系统
printf("谢谢使用,再见! ");
break;
default:
printf("输入错误\n");
}
}
void read() //定义读取文件函数
{
FILE *fp;
if((fp=fopen("hangban.txt","rt"))==NULL)
{
printf("创建文件失败! ");
getchar();
}
i=0;
while(!feof(fp))
{
fread(&s[i],sizeof(struct air),1,fp); //逐块读取数据
i++;
m++; //计算存在航班数
}
m--;
fclose(fp);
}
void save() //定义保存函数
{
FILE *fp;
if((fp=fopen("hangban.txt","wt"))==NULL)
{
printf("创建文件失败! ");
}
for(i=0;i<m;i++) //逐块保存数据
fwrite(&s[i],sizeof(struct air),1,fp);
fclose(fp);
}
void add() //定义增加航班信息函数
{
do{
printf("请依次输入您要增加的航班信息(以回车键结束): \n"); //打印提示信息
printf("-------------------------------------------------------------------------- \n");
printf("请输入航班号: ");
scanf("%s",&s[m].flightNO); //读取航班号
printf("请输入起始站: ");
scanf("%s",&s[m].start); //读取起始站
printf("请输入终点站: ");
scanf("%s",&s[m].end); //读取终点站
printf("请输入时间: ");
scanf("%f",&s[m].day); //读取时间
printf("请输入机票数: ");
scanf("%d",&s[m].totalTicket); //读取预售机票数
printf("请输入机票数: ");
scanf("%d",&s[m].sellTicket); //读取已售机票数
m++;
printf("添加完毕,是否继续添加?请键入y或n以回车键结束:");
scanf("%s",flightNO);
}while(!strcmp(flightNO,"y")); //判断是否继续添加
}
void output() //定义输出格式函数
{
printf("航班号\t\t起始站\t\t终点站\t\t时间\t\t预售机票数\t\t已售机票数\n"); //信息标题
for(i=0;i<m;i++)
printf("PRINT");//打印出信息
}
void print() //定义显示航班信息函数
{
printf("\n目前我们有如下航班:\n");
output(); //调用输出格式函数
printf("\n请按回车键返回上层菜单 ");
}
void search() //定义查询函数
{
int n;
do
{
printf("\n请输入航班号: ");
scanf("%d",&n); //输入查询的航班号
for(i=0;i<m;i++)
{
if(s[i].flightNO==n) //按航班号判定输出条件
{
printf("\n您所查找的航班信息为:\n ");
printf("航班号\t\t起始站\t\t终点站\t\t时间\t\t机票数 \n\n");
printf("PRINT"); //显示信息
printf("\n查询完毕,按回车键继续");
getchar();
getchar();
return;
}
}
printf("\n对不起,没有您需要的信息!\n ");
printf("是否重新查找?请键入y或n以回车键结束 ");
scanf("%s",flightNO);
}while(!strcmp(flightNO,"y"));//判定是否重新查找
}
```
###### 运行结果及报错内容
结果显示的是文件创建失败,按任意键后就结束运行了
###### 我的解答思路和尝试过的方法
###### 我想要达到的结果
可以创建文件而且程序可以正常运行
if((fp=fopen("hangban.txt","rt"))==NULL)中的rt改成r+
fopen()
模式写错了,应该是"w"
,不是"wt"