C语言从文件读取内容放入结构,再进行选择(帮我改下代码)

2024-12-12 00:49:42
推荐回答(2个)
回答1:

问题出在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);关闭文件,否则可能出现意外的结果。

回答2:

#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我,讨论。。