关于文件读写问题,请教各位网友。。。
程序代码:
#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文件中,代码没错。为何?