|
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行各多出一个,这是导致 的直接原因,修正以后问题消失。
另外,你的排序代码没有效果,我重写了这段代码。
|