【求助】这个程序可以运行但是无法保存文件,是什么原因呢,高手帮帮忙啊
#include<stdio.h>#include<stdlib.h>
#define X 25
#define N 12
struct name{
char xing[X];
char ming[X];
};
struct feiji{
int hao;
int kong;
struct name xm;
};
void caidan(void);/*选择菜单*/
void qk(void);/*清空输入行*/
int kn(struct feiji *pr); /*空座数量*/
void lb(struct feiji *pr);/*空座位号*/
void xs(struct feiji *pr);/*有座乘客*/
void dz(struct feiji *pr);/*订座程序*/
void tz(struct feiji *pr);/*退座程序*/
int main(void)
{
struct feiji zw[N];
struct name pp={"",""};
for(int p=0;p<N;p++)
{
zw[p].hao=p+1;
zw[p].kong=0;
zw[p].xm=pp;
}
FILE *fp;
if((fp=fopen("14.18.8wb.txt","r+b"))==NULL)
{
puts("打开文件错误,退出程序!");
system("pause");
exit(1);
}
int n=0;
while(n<N&&fread(&zw[n],sizeof(struct feiji),1,fp))
n++;
caidan();
int ch;
while((ch=getchar())!='f')
{
qk();
switch(ch)
{
case 'a':kn(zw);break;
case 'b':lb(zw);break;
case 'c':if(kn(zw)==0)
{
puts("本机暂无乘客!");
caidan();break;
}
else
{
xs(zw);break;
}
case 'd':dz(zw);break;
case 'e':tz(zw);break;
default:puts("输入错误,重新输入!");
caidan();continue;
}
}
fwrite(zw,sizeof(struct feiji),N,fp);
fclose(fp);
system("pause");
return 0;
}
void caidan(void)
{
printf("\nTo choose a function,enter its letter lable(选择一个功能,进入其字母标签):\n"
"a)Show number of empty seats(显示空座位数量)\n"
"b)Show list of empty seats(显示空座位列表)\n"
"c)Show alphabetical list of seats(乘客名字顺序显示座位)\n"
"d)Assign a customer to a seat assignment(订座程序)\n"
"e)Delete a seat assignment(退座程序)\n"
"f)Quit\n");
}
void qk(void)
{
while(getchar()!='\n')
continue;
}
int kn(struct feiji *pr)
{
int n=0;
for(int p=0;p<N;p++)
if((pr+p)->kong==0)
n++;
printf("空座位数量是%d\n",n);
caidan();
return N-n;
}
void lb(struct feiji *pr)
{
for(int p=0;p<N;p++)
if((pr+p)->kong==0)
printf("%d号\n",p+1);
caidan();
}
void xs(struct feiji *pr)
{
for(int p=0;p<N;p++)
if((pr+p)->kong==1)
printf("%d号座位,%s%s\n",(pr+p)->hao,(pr+p)->xm.xing,(pr+p)->xm.ming);
caidan();
}
void dz(struct feiji *pr)
{
int p=0;
while(p<N)
{
if((pr+p)->kong==0)
{
puts("请输入你的姓");
gets((pr+p)->xm.xing);
puts("请输入你的名");
gets((pr+p)->xm.ming);
printf("您的座位号是%d号\n",(pr+p)->hao);
(pr+p)->kong=1;
caidan();
break;
}
p++;
}
if(p==N)
{
puts("座位已满!");
caidan();
}
}
void tz(struct feiji *pr)
{
struct name temp={"",""};
int n;
puts("输入您要退的座位号:");
while(scanf("%d",n)==1)
{
if(n<=N&&n>0)
{
if((pr+n-1)->kong==1)
{
(pr+n-1)->kong=0;
(pr+n-1)->xm=temp;
puts("您的座位已退!");
break;
}
}
else
puts("输入错误,重新输入!");
}
caidan();
}
/*这个程序运行后进入d选择输入姓名以后按f关闭这个程序,重新运行程序后进入a选择,得到的结果是12,但是应该是11啊,到底是什么原因呢*/
[ 本帖最后由 uponshiwo 于 2012-5-7 20:58 编辑 ]