为啥学号项下含有姓名?

#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);