#include<stdio.h>
struct student
{
char num[3];
char name[3];
int Cgrade;
};
void fun(struct student stu[],int N)
{
for(int i=0;i<N;i++)
{
for(int j=0;j<N-i-1;j++)
{
if(stu[j].Cgrade<stu[j+1].Cgrade)
{
int temp1=stu[j].Cgrade;
stu[j].Cgrade=stu[j+1].Cgrade;
stu[j+1].Cgrade=temp1;
char temp2[3];
for(int k=0;k<3;k++)
{
temp2[k]=stu[j].num[k];
stu[j].num[k]=stu[j+1].num[k];
stu[j+1].num[k]=temp2[k];
}
char temp3[3];
for(int k=0;k<3;k++)
{
temp3[k]=stu[j].name[k];
stu[j].name[k]=stu[j+1].name[k];
stu[j+1].name[k]=temp3[k];
}
}
}
}
printf("\t序号\t学号\t\t姓名\tC语言成绩\n");
for(int i=0;i<N;i++)
{
printf("\t%d\t%s\t\t%s\t%d\n",i+1,stu[i].num,stu[i].name,stu[i].Cgrade);
}
}
int main()
{
int N=3;
struct student stu[N];
int i,j;
for(i=0;i<N;i++)
{
printf("NO.%d\n",i+1);
printf("请输入学号:");
scanf("%s",&stu[i].num);
printf("请输入姓名:");
scanf("%s",&stu[i].name);
printf("请输入C语言成绩:");
scanf("%d",&stu[i].Cgrade);
}
fun(stu,N);
return
0;
}
因为你没截断。'\0'是截断符号。
scanf("%s",&stu[i].name);
改成scanf("%s",stu[i].name);
scanf("%s",&stu[i].num);
改成scanf("%s",stu[i].num);