关于文件的。。运行结果不完全
/*P192-习题10-2.建立一个学生信息表,包含学号、姓名、性别、年龄,编写程序实现学生信息的输入并保存功能和查询年龄小于等于输入值的功能,
如输入20,表示在学生信息中查找年龄小于等于20的学生信息,并显示在显示器上。*/
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int num;
char name[20];
char sex[20];
int age;
}AGE;//定义年龄信息数据结构
void input(AGE *s)//输入一个年龄信息
{
char temp[20];
int i;
printf("please input num:");
gets(temp);
s->num=atoi(temp);
printf("\nplease input name:");
gets(s->name);
printf("\nplease input sex(female/male):");
gets(s->sex);
printf("\nplease input age:");
gets(temp);
s->age=atoi(temp);
}
void save(char *filename,AGE *s)//filename保存年龄的文件名,s年龄信息指针
{
FILE *fp;
if((fp=fopen(filename,"ab"))==NULL)//如果追加文件filename不存在
{
fp=fopen(filename,"wb");//新建文件filename
}
fwrite(s,sizeof(AGE),1,fp);//将年龄信息写入文件
fclose(fp);
}
AGE *query(char *filename,int standard,AGE *s)
{
FILE *fp;
if((fp=fopen(filename,"rb"))==NULL)//如果打开文件不存在
return NULL;
while(!feof(fp))//判断指针是否已经到达文件底部
{
fread(s,sizeof(AGE),1,fp);
if((s->age)<=standard)
{
fclose(fp);
return s;
}
}
fclose(fp);//关闭文件
return NULL;
}
main()
{
char ch;
char filename[80];
int standard;
AGE a,*sp=&a;
printf("\nplease input operation's filename:");
gets(filename);
printf("\ninput data now?(y/n):");
ch=getchar();
getchar();
while(ch=='y'||ch=='Y')
{
input(sp);
save(filename,sp);
printf("\ncontinue(y/n):");
ch=getchar();
getchar();
}
printf("please input standard of query:");
scanf("%d",&standard);
if(query(filename,standard,sp)!=NULL)
printf("%d\t%s\t%s\t%d\n",sp->num,sp->name,sp->sex,sp->age);
else
printf("\nno result\n");
}
运行结果只能够输出一个合要求的信息。。感觉是query(filename,standard,sp)这里错了,求指教!谢谢