关于文件读写问题,请教各位网友。。。
程序代码:#include<stdio.h>
#include<stdlib.h>
struct student
{
int num;
char name[20];
int remark;
};
int main()
{
int max(struct student a[],int n); //声明求最高成绩函数。
int compare(struct student a[],int n); // 声明比较函数。
int rank(struct student a[],int n); //声明分数等级函数。
int i;
struct student stu[100];
FILE *fin,*fout; //定义文件指针。
fout=fopen("stuout.txt","w");
fin=fopen("stuin.txt","r");
fout=fopen("stuout.txt","w");
if((fout=fopen("stuout.txt","w"))==NULL)
{
printf("打开文件失败!");
exit(0);
}
if((fin=fopen("stuin.txt","r"))==NULL)
{
printf("文件打开失败!\n");
exit(0); //如果指针返回一个空值,输出文件打开失败,关闭所有文件
}
else
{
i=0;
while(!feof(fin))
{
fscanf(fin,"%d%s%d",&stu[i].num,stu[i].name,&stu[i].remark);
i++;
}
}
for(i=0;i<100;i++)
printf("%d %s %d\n",stu[i].num,stu[i].name,stu[i].remark);
max(stu,100);
compare(stu,100);
rank(stu,100);
printf("\n\n\n");
return 0;
}
int max(struct student a[],int n) //定义函数
{
FILE *fout;
fout=fopen("stuout.txt","w");
struct student t;
int i;
t.remark=a[0].remark;
for(i=1;i<n;i++)
{
if(t.remark<a[i].remark)
{
t.remark=a[i].remark;
}
}
fprintf(fout,"%d %s %d\n",t.num,t.name,t.remark);
printf("%d %s %d\n",t.num,t.name,t.remark);
for(i=0;i<n;i++)
{
if(a[i].remark==t.remark)
{
fprintf(fout,"%d %s %d\n",a[i].num,a[i].name,a[i].remark);
printf("%d %s %d\n",a[i].num,a[i].name,a[i].remark);
}
}
return 0;
}
int compare(struct student a[],int n) //定义与平均值比较的函数
{
FILE *fout;
fout=fopen("stuout.txt","w");
int i, n1=0,n2=0,n3=0,sum=0,ave;
for(i=0;i<n;i++)
sum=a[i].remark;
ave=sum/n;
fprintf(fout,"平均成绩为:%d\n",ave);
for(i=0;i<n;i++)
{
if(a[i].remark>ave)
n1++;
}
fprintf(fout,"成绩高于平均成绩的学生人数:%d\t",n1);
for(i=0;i<n;i++)
{
if(a[i].remark==ave)
n2++;
}
fprintf(fout,"成绩等于平均成绩的学生人数: %d\t",n2);
for(i=0;i<n;i++)
{
if(a[i].remark<ave)
n3++;
}
fprintf(fout,"成绩低于平均成绩的学生人数: %d\t",n3);
return 0;
}
int rank(struct student a[],int n) //定义分数等级函数
{
FILE *fout;
fout=fopen("stuout.txt","w");
int i,n1=0,n2=0,n3=0,n4=0,n5=0;
float p1,p2,p3,p4,p5;
for(i=0;i<n;i++)
{
if(a[i].remark>=90)
n1++;
}
p1=(n1/n)*100;
for(i=0;i<n;i++)
{
if(a[i].remark>=80&&a[i].remark<90)
n2++;
}
p2=(n2/n)*100;
for(i=0;i<n;i++)
{
if(a[i].remark>=70&&a[i].remark<80)
n3++;
}
p3=(n3/n)*100;
for(i=0;i<n;i++)
{
if(a[i].remark>=60&&a[i].remark<70)
n4++;
}
p4=(n4/n)*100;
for(i=0;i<n;i++)
{
if(a[i].remark<60)
n5++;
}
p5=(n5/n)*100;
fprintf(fout,"优秀(90-100)人数: %d 百分比: 百分之%f\n",n1,p1);
fprintf(fout,"良好(80-89)人数: %d 百分比: 百分之%f\n",n2,p2);
fprintf(fout,"中等(70-79)人数: %d 百分比: 百分之%f\n",n3,p3);
fprintf(fout,"及格(60-69)人数: %d 百分比: 百分之%f\n",n4,p4);
fprintf(fout,"不及格(<60)人数: %d 百分比: 百分之%f\n",n5,p5);
return 0;
}
磁盘里有stuin.txt和stuout.txt两个文件,stuin.txt中有原始数据,我想把处理过的数据存到stuout.txt文件中。但。。。。
我这里只有分数等级的人数能输出到stuout.txt文件中(但百分比都是0。000000),其他的两个函数处理的数据结果没输出到stuout.txt文件中,代码没错。为何?










