2 u013071890 u013071890 于 2013.12.12 21:19 提问

C语言关于使用结构体数组的问题

#include
struct Student
{
int mun;
long char name[5];
int score[3];
struct Student *next;
};
int main()
{
struct Student a,b,c,*head,*p;
a.mun=10101;a.name="张丹";a.score[0]=89;a.score[1]=95;a.score[2]=91;
b.mun=10103;a.name="彭浩";b.score[0]=99;a.score[1]=89;a.score[2]=90;
c.mun=10105;a.name="张磊";b.score[0]=85;a.score[1]=95;a.score[2]=97;
head=&a;
a.next=&b;
b.next=&c;
c.next=NULL;
p=head;
do
{
printf("%ld %s %d %d %d %d\n",p->mun,p->name,p->score[0],p->score[1],p->score[2]);
p->next;
}while(p!=NULL);
return 0;
}
在名字赋值那里报错left operand must be l-value,求解释为什么,要怎么修改。

4个回答

zyc224517743
zyc224517743   2013.12.13 09:30
已采纳

第一,char类型只有unsigned char和char两种类型,long是不能修饰char类型的;
第二,对于数组来说,数组名是一个地址值,不能作为左值,只能作为右值;一个汉字在程序中占2或者4个字节,这是根据汉字的编码规则和编译器来确定的,如果要输入汉字,最好用指针的方式。
第三,写程序的时候要细心哦,“b.mun=10103;a.name="彭浩";b.score[0]=99;a.score[1]=89;a.score[2]=90;b.mun=10103;a.name="彭浩";b.score[0]=99;a.score[1]=89;a.score[2]=90;p = p->next”;
第三,给你一点小建议,遇到问题了,尽量自己查资料,调试,分析错误,这样收获比较大;希望对你有用!

tx1119741621
tx1119741621   2013.12.12 21:46

字符串赋值用strcpy!

u012337666
u012337666   2013.12.12 22:28

把long char name[5]改为char *name;这样就可以了,望采纳!

DoctorCZM
DoctorCZM   2013.12.19 20:07

对字符串数据直接赋值不对,a.name代表的是字符数组首地址,是常量,不是变量,所以提示不是左值的错误。解决办法楼上已经提供,在此不再多说,希望您能理解!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!