|
10鱼币
题目要求如下,但不知道为什平均分老是显示为0.00。请大家帮忙看看,谢谢了
- #include<stdio.h>
- #include<stdlib.h>
- struct{
- char num[10];
- char name[10];
- int score1,score2,score3;
- float average;
- }ace[3],temp;//temp是后面排序用到的
- int main(void)
- {
- int i,flag,j;
- FILE *fp1;
- FILE *fp2;
- for(i=0;i<3;i++)
- {
- printf("input student %d\n",i+1);
- printf("num:");
- scanf("%s",ace[i].num);
- printf("name:");
- scanf("%s",ace[i].name);
- printf("score 1:");
- scanf("%d",&ace[i].score1);
- printf("score 2:");
- scanf("%d",&ace[i].score2);
- printf("score 3:");
- scanf("%d",&ace[i].score3);
- ace[i].average=(float)(ace[i].score1+ace[i].score2+ace[i].score3)/3.0;
- }
-
- if((fp1 = fopen("stu.txt","w+")) == NULL)//这里不知道为什么写成 w就要乱码
- {
- printf("文件打开失败!");
- exit(EXIT_FAILURE);
- }
- printf("File 'stu':\n");
- for(i=0;i<3;i++)
- {
- fprintf(fp1,"%s %s %d %d %d %.2f\n",ace[i].num,ace[i].name,ace[i].score1,ace[i].score2,ace[i].score3,ace[i].score3,ace[i].average);
- }
- fseek(fp1,0L,SEEK_SET);//不知道为什么要写这个,但同学说好像必须加上这个?
-
- for(i=0;i<3;i++)
- {
- char nu[10];
- char na[10];
- int a,b,c;
- float d;
- fscanf(fp1,"%s%s%d%d%d%f",nu,na,&a,&b,&c,&d);//这里为什么改成.2f就会出错啊?
- printf("%8s%8s%8d%8d%8d%8.2f\n",nu,na,a,b,c,d);
- }
- fclose(fp1);
-
- for(i=0;i<3;i++)//排序
- {
- flag=0;
- for(j=0;j<3-i;++j)
- {
- if(ace[j].average>ace[j+1].average)
- {
- temp=ace[j];
- ace[j]=ace[j+1];
- ace[j+1]=temp;
- flag=1;
- }
- if(flag==0){break;}
- }
- }
-
- if((fp2 = fopen("stu_sort.txt","w+")) == NULL)//这里不知道为什么写成 w就要乱码
- {
- printf("文件打开失败!");
- exit(EXIT_FAILURE);
- }
- printf("Now:\n");
- for(i=0;i<3;i++)
- {
- fprintf(fp2,"%s %s %d %d %d %f\n",ace[i].num,ace[i].name,ace[i].score1,ace[i].score2,ace[i].score3,ace[i].score3,ace[i].average);
- }
- fseek(fp2,0L,SEEK_SET);
- for(i=0;i<3;i++)
- {
- char ai[10];
- char bi[10];
- int ci,di,ei;
- float fi;
- fscanf(fp2,"%s%s%d%d%d%f",ai,bi,&ci,&di,&ei,&fi);
- printf("%8s%8s%8d%8d%8d%8.2f\n",ai,bi,ci,di,ei,fi);
- }
- fclose(fp2);
- system("pause");
- return 0;
- }
复制代码
本帖最后由 jackz007 于 2018-12-10 12:21 编辑
你程序代码的第40、79行各多出一个 ,这是导致 的直接原因,修正以后问题消失。
另外,你的排序代码没有效果,我重写了这段代码。
- #include<stdio.h>
- #include<stdlib.h>
- struct STUDENT{
- char num[10] ;
- char name[10] ;
- int score1 , score2 , score3 ;
- float average ;
- }ace[3] , temp ;
- int main(void)
- {
- int i , flag , j ;
- FILE * fp1 ;
- FILE * fp2 ;
- for(i = 0 ; i < 3 ; i ++) {
- printf("input student %d\n" , i + 1) ;
- printf("num:") ;
- scanf("%s",ace[i].num) ;
- printf("name:") ;
- scanf("%s",ace[i].name) ;
- printf("score 1:") ;
- scanf("%d", & ace[i].score1) ;
- printf("score 2:") ;
- scanf("%d", & ace[i].score2) ;
- printf("score 3:") ;
- scanf("%d", & ace[i].score3) ;
- ace[i].average = (float)(ace[i].score1 + ace[i].score2 + ace[i].score3) / 3.0 ;
- }
-
- if((fp1 = fopen("stu.txt","w+")) == NULL) { // 以读写模式打开文件,若文件存在则清空其内容,若不存在则建立该文件。
- printf("文件打开失败!") ;
- exit(EXIT_FAILURE) ;
- }
- printf("File 'stu':\n") ;
- for(i = 0 ; i < 3 ; i ++) fprintf(fp1 ,"%s %s %d %d %d %.2f\n" , ace[i].num , ace[i].name , ace[i].score1 , ace[i].score2 , ace[i].score3 , ace[i].average) ;
- fseek(fp1 , 0L , SEEK_SET) ; //文件读写指针回到文件开头
-
- for(i = 0 ; i < 3 ; i ++) {
- char nu[10] ;
- char na[10] ;
- int a , b , c ;
- float d ;
- fscanf(fp1 ,"%s%s%d%d%d%f" , nu , na , & a , & b , & c , & d) ;
- printf("%8s %8s %8d %8d %8d %8.2f\n" , nu , na , a , b , c , d) ;
- }
- fclose(fp1);
-
- for(i = 1 ; i < 3 ; i ++) { // 排序
- j = i ;
- while (ace[j].average < ace[j - 1].average && j > 0) {
- temp = ace[j] ;
- ace[j] = ace[j - 1] ;
- ace[j - 1] = temp ;
- j -- ;
- }
- }
- if((fp2 = fopen("stu_sort.txt" , "w+")) == NULL) { // 以读写模式打开文件,若文件存在则清空其内容,若不存在则建立该文件。
- printf("文件打开失败!") ;
- exit(EXIT_FAILURE) ;
- }
- printf("Now:\n") ;
- for(i = 0 ; i < 3 ; i ++) fprintf(fp2 ,"%s %s %d %d %d %f\n" , ace[i].num , ace[i].name , ace[i].score1 , ace[i].score2 , ace[i].score3 , ace[i].average) ;
- fseek(fp2 , 0L , SEEK_SET) ; //文件读写指针回到文件开头
- for(i = 0 ; i < 3 ; i ++){
- char ai[10] ;
- char bi[10] ;
- int ci , di , ei ;
- float fi ;
- fscanf(fp2 ,"%s%s%d%d%d%f" , ai , bi , & ci , & di , & ei , & fi) ;
- printf("%8s %8s %8d %8d %8d %8.2f\n" , ai , bi , ci , di , ei , fi) ;
- }
- fclose(fp2) ;
- system("pause") ;
- return 0 ;
- }
复制代码
|
最佳答案
查看完整内容
你程序代码的第40、79行各多出一个,这是导致 的直接原因,修正以后问题消失。
另外,你的排序代码没有效果,我重写了这段代码。
|