C语言 求改变输入信息的顺序

addbook() //增加新书
{
FILE *fp;
int i,j;
if((fp=fopen("book.txt","ab"))==NULL)
{printf("文件打开错误");exit(0);}
for(j=0;j<80;j++)printf("*");
printf("\t 欢迎进入添加书籍系统\n");
printf("请输入新书的书号(1-1000)\n");
scanf("%d",&i);
if (i>1000||i<0)
{
do
{
printf("输入错误,请重新输入\n");
scanf("%d",&i);
}while(i>1000||i<0);
}
fread(&book[i],sizeof(struct book),1,fp);
if(book[i].number==i) //判断书是否已存在
{ printf("当前书已存在,请使用书籍修改系统\n");
getch();
return FALSE;
}
else
book[i].number=i;
printf("请你输入书名\n");
scanf("%s",book[i].name);
printf("请你输入书的作者\n");
scanf("%s",book[i].writer);
printf("请输入新书的类型(只能为玄幻,历史,武侠,言情,诗歌,散文,技术应用之一)\n");
scanf("%s",book[i].sort);
printf("请设为1或0,1代表书还没人借,0表示书已经借出,请勿输入其他数字\n");
printf("请你设定书的状态\n");
scanf("%d",&book[i].turefalse);
fwrite(&book[i],sizeof(struct book),1,fp);
fclose(fp);
return FALSE;

}
void bookcount() //书籍统计函数
{
FILE *fp;
int n=0,m=0,i;
if((fp=fopen("book.txt","rb"))==NULL)
{ printf("文件无法打开");exit(0);}
else
{
for(i=0;i<80;i++)printf("*");

for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(book[i].number!=i&&strlen(book[i].name)!=0&&strlen(book[i].writer)!=0)
{ n=n+1;
if(book[i].turefalse==0)
{m++;
printf("%-5d%-30s%-8s %-16s无人借阅\n",book[i].number,book[i].name,book[i].writer,book[i].sort);
}
else printf("%-5d%-30s%-8s %-16s已经借阅\n",book[i].number,book[i].name,book[i].writer,book[i].sort);
}
}
}
fclose(fp);
printf("统计情况如下:\n");
printf("目前共有%d本书,其中%d本书已经借出,未借出%d本书\n",n,m,n-m);
}
其中book为结构体数组,小弟发现,统计时候的顺序是杂乱的,是按照输入顺序排列的,如果想按照书号排序,应该怎么办?
是在addbook上抑或bookcount上修改?麻烦大虾指教
添加一个排序函数也行,麻烦帮忙写一下了

第1个回答  2009-07-19
主函数在哪里?你调用bookcount之前加个排序就可以了。
按书号排序,book[i],按i排序,随便冒泡,顺序什么方法都无所谓。
第2个回答  2009-07-19
已经生成链表的话排序就不好排了

最好在输入的时候就
输入一个插一个比较好

输入一个元素->
根据学号找到该元素应该在的位置->
将该元素插入该位置;

这样就可以直接生成一个按学号排好序的链表;本回答被提问者采纳
第3个回答  2009-07-19
在AddBook的同时排序比较高效,你就在增加新书的时候和前一本比较一下,然后插到合适的位置就行。
第4个回答  2009-07-19
最好是在addbook上修改,排好顺序后直接统计就可以了

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网