问题出在work()函数中,fprintf()函数是不需要取地址的,否则输出的将是变量的地址,而不是变量的内容,修改如下:
work()函数中的:
fprintf(fpout,"%2d %19s %1d %1d %1d\n",&stu[i].num,stu[i].name,&stu[i].math,&stu[i].program,&stu[i].physics);
改为
fprintf(fpout,"%2d %19s %1d %1d %1d\n",stu[i].num,stu[i].name,stu[i].math,stu[i].program,stu[i].physics);
另外,应该在work()函数的最后加上fclose(fpout);关闭文件,否则可能出现意外的结果。
#include
#define format "%d%s%d%d%d"
struct student {
int num; /* 序号 */
char name[20]; /* 姓名 */
int gmath; /* 数学成绩 */
int ginf; /* 信息学成绩 */
int gphy; /* 物理成绩 */
};
void selinfo(struct student *stu);
int main(void)
{
int i=0;
struct student stu[16];
FILE *fp;
/* 打开文件 */
fp=fopen("stuinfo.txt","r");
if(fp==NULL) /* 出错 */
{
printf("open stuinfo.txt error.\n");
exit(0);
}
/* 读入数据 */
for(i=0;i<16;i++)
fscanf(fp,format,&stu[i].num,stu[i].name,&stu[i].gmath,\
&stu[i].ginf,&stu[i].gphy);
fclose(fp); /* 关闭文件 */
selinfo(stu); /* 查找信息 */
return 0;
}
/* 查找信息 */
void selinfo(struct student *stu)
{
int i;
FILE *fp;
/* 写文件 */
fp=fopen("rstinfo.txt","w");
if(fp==NULL) /* 出错 */
{
printf("open rstinfo.txt error.\n");
exit(0);
}
/* 查找信息并写入文件 */
for(i=0;i<16;i++)
{
if(stu[i].ginf<3)
fprintf(fp,"%02d %-20s %d %d %d\n",stu[i].num,stu[i].name,
stu[i].gmath,stu[i].ginf,stu[i].gphy);
}
fclose(fp); /* 关闭文件 */
}
调试完毕,基本可以使用,如果还有什么问题,百度HI我,讨论。。