#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct student
{
char name[10];
char num[10];
int score[3];
float aver;
}stud[5];
//结构体内排序
void sort(struct student *stud_p,int n)
{
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(stud_p[k].aver<stud_p[j].aver) k=j;
if(k!=i)
//这里的问题了*****************************
{
char name_temp[10]={0};
char num_temp[10]={0};
int score_temp;
float aver_temp;
strcpy(name_temp,stud_p[i].name);
strcpy(stud_p[i].name,stud_p[k].name);
strcpy(stud_p[k].name,name_temp);
strcpy(num_temp,stud_p[i].num);
strcpy(stud_p[i].num,stud_p[k].num);
strcpy(stud_p[k].num,num_temp);
score_temp=stud_p[i].score[0];stud_p[i].score[0]=stud_p[k].score[0];stud_p[k].score[0]=score_temp;
score_temp=stud_p[i].score[1];stud_p[i].score[1]=stud_p[k].score[1];stud_p[k].score[1]=score_temp;
score_temp=stud_p[i].score[2];stud_p[i].score[2]=stud_p[k].score[2];stud_p[k].score[2]=score_temp;
aver_temp=stud_p[i].aver;stud_p[i].aver=stud_p[k].aver;stud_p[k].aver=aver_temp;
}
}
}
//主函数
void main()
{
FILE *fp1;
int i=0;
if((fp1=fopen("d:\\test\\1.txt","r"))==NULL)
{printf("Wrong!");exit(0);}
while(!feof(fp1))
{
fscanf(fp1,"%s%s%d%d%d%f\n",stud[i].name,stud[i].num,&stud[i].score[0],&stud[i].score[1],&stud[i].score[2],&stud[i].aver);
i++;
}
fclose(fp1);
sort(stud,5);//调用函数sort();
i=0;
for(i=0;i<5;i++)
printf("%s %s %d %d %d %f\n",stud[i].name,stud[i].num,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].aver);
}
上面的代码是正确的,但是问题是这样的,就是在************以下的结构体交换的代码,我想另外写的一个函数里,我是这样写的:
把****************一下换为
{swap(stud_p+i,stud_p+k);}
然后:
void swap(struct student *p1,struct student *p2)
{
char name_temp[10];
char num_temp[10];
int score_temp;
float aver_temp;
strcpy(name_temp,p2.name);
strcpy(p2.name,p1.name);
strcpy(p1.name,name_temp);
strcpy(num_temp,p2.num);
strcpy(p2.num,p1.num);
strcpy(p1.num,num_temp);
score_temp=p1.score[0];p1.score[0]=p2.score[0];p2.score[0]=score_temp;
score_temp=p1.score[1];p1.score[1]=p2.score[1];p2.score[1]=score_temp;
score_temp=p1.score[2];p1.score[2]=p2.score[2];p2.score[2]=score_temp;
aver_temp=p1.aver;p1.aver=p2.aver;p2.aver=aver_temp;
}
但是编译总是出错,我想是不是函数参数传递的问题呢,请帮我看看吧,谢谢了!