主题:关于结构中字符数组定义的问题
# include<stdio.h>
# define N 5
struct student
{
char num[3];
char name[6];
float score[4];
}stu[N];
void main()
{
void input(struct student stu[N]);
void output(struct student stu[N] );
input(stu);
output(stu);
}
void input(struct student stu[N])
{
int i,j;
for(i=0;i<N;i++)
{
printf("please input the information of student %d:\n",i+1);
printf("num:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
for(j=0;j<4;j++)
{
printf("score%d:",j+1);
scanf("%f",&stu[i].score[j]);
}
}
}
void output(struct student stu[N])
{
int i,j;
printf("num name score1 score2 score3 score4\n");
for(i=0;i<N;i++)
{
printf("%-3s %-6s",stu[i].num,stu[i].name);
for(j=0;j<4;j++)
printf("%-9.2f",stu[i].score[j]);
printf("\n");
}
printf("\n");
}
显示结果时,为什么name显示两遍?我问同学,同学说在内存中,因为结构体中name占的内存比num大,所以会占num的内存,所以程序运行时,name显示两次,分别在num和name中。如果把char num[3];char name[6];的定义交换后,程序运行结果就正确了,这是为什么?
# define N 5
struct student
{
char num[3];
char name[6];
float score[4];
}stu[N];
void main()
{
void input(struct student stu[N]);
void output(struct student stu[N] );
input(stu);
output(stu);
}
void input(struct student stu[N])
{
int i,j;
for(i=0;i<N;i++)
{
printf("please input the information of student %d:\n",i+1);
printf("num:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
for(j=0;j<4;j++)
{
printf("score%d:",j+1);
scanf("%f",&stu[i].score[j]);
}
}
}
void output(struct student stu[N])
{
int i,j;
printf("num name score1 score2 score3 score4\n");
for(i=0;i<N;i++)
{
printf("%-3s %-6s",stu[i].num,stu[i].name);
for(j=0;j<4;j++)
printf("%-9.2f",stu[i].score[j]);
printf("\n");
}
printf("\n");
}
显示结果时,为什么name显示两遍?我问同学,同学说在内存中,因为结构体中name占的内存比num大,所以会占num的内存,所以程序运行时,name显示两次,分别在num和name中。如果把char num[3];char name[6];的定义交换后,程序运行结果就正确了,这是为什么?