C语言结构体数组赋值问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 15:53:10
#include<stdio.h>
#define N 10
struct student
{char num[6];
char name[8];
float score[3];
float avr;
}stu[N];

void main()
{int i,j;
for(i=0;i<N;i++)
{printf("input scores of student %d:\n",i+1);
printf("No.:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{printf("score %d:",j+1);
scanf("%f",&stu[i].score[j]);
}
}

没办法完全赋值,两个for循环都无法赋值,请大家帮忙看看.
运行不了,我记得只有链表才要申请空间,数组不需要吧,况且我定义的是全局变量,应该不需要再定义啊,我把float 该为int,就可以执行了,为什么

?#include<stdio.h>
#define N 5
struct student
{char num[6];
char name[8];
int score[3];
float avr;
}stu[N];

void main()
{int i,j;
for(i=0;i<N;i++)
{printf("input scores of student %d:\n&qu

你没有申请struct的空间,只是声明了啊,在main里加入:
student stu[10]; 就OK了
怎么可能不需要啊,你说链表中需要,那是肯定的
像这样,简单点说就是你把student看成是跟int,float,double一样的基本类型,这样你就会处理了,你认为int stu[10];这样的东西都不需要申请空间吗?如果不申请,那好比这样:
int *a;//这里只有个指针,并没有实际的空间
a=new int(10);这样才做了申请空间的动作;
以上2个语句何以:
int a=10;//这样便达到了上边2条语句的效果

但有一点不同就是new分配的是堆空间,这跟直接int i=10;不一样!
但效果是一样的!
如果是C语言的全局变量,这就不需要申请空间,全局变量生命周期在整个程序开始到结束!

void main()
{int i,j;
student stu[N];
for(i=0;i<N;i++)
{
printf("input scores of student %d:\n",i+1);
printf("No.:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{printf("score %d:",j+1);
scanf("%f",&stu[i].score[j]);
}
}

你的程序只声明了结构体类型;
你要在main里定义一个结构体类型的变量,如楼上所说,student stu[N] 就可以了,以达到在内存为你声明的结构体开辟空间的目的,这样你才能赋值;

上面程序是正确的只不过在主程序后面确少},主函数void main函数最好改为int mai