C语言链表输入元素时赋值问题

这是我编写的一个小程序段,目的是:输入学号、姓名、性别,然后再输出。
可是运行时第35、38和41行总有一个相同的错误提示:cpp(35) : error C2106: '=' : left operand must be l-value。
请问这是怎么回事啊?
具体程序如下:

//目的:输入学号,姓名,性别.然后再输出
#include <stdio.h>
#include <malloc.h>
struct goo
{
char Student_number[10];
char name[20];
char sex[10];
float money;
};
typedef struct node
{
struct goo data;
struct node *link;
}linklist,Node;

void add(linklist*);
void show(linklist*);
void main()
{
linklist *head;
head=(linklist*)malloc(sizeof(linklist));
head->link=NULL;
add(head);
show(head);
}

void add(linklist* head)
{
Node *q;
char sn[10];
char n[20],s[10];
q=(Node*)malloc(sizeof(Node));
printf("Please enter student number:");
scanf("%d",&sn);
q->data.Student_number=sn; //有错,Why?
printf("Please enter name:");
scanf("%s",&n);
q->data.name=n; //有错,Why?
printf("Please enter sex:");
scanf("%s",&s);
q->data.sex=s; //有错,Why?
q->link=head->link;
head->link=q;
}

void show(linklist *head)
{
Node *p;
p=head->link;
while(p!=NULL)
{
printf("Student number:%d\n",p->data.Student_number);
printf("name:%s\n",p->data.name);
printf("sex:%s\n",p->data.sex);
}
}
...全文
259 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
夜雨十年灯 2012-04-16
  • 打赏
  • 举报
回复
使用fwrite函数
evencoming 2012-04-16
  • 打赏
  • 举报
回复
fp=fopen("out.txt","w");
fprintf(fp,"%d\t%s\t%s\n",&(p->data.Student_num),p->data.name,p->data.sex);
  • 打赏
  • 举报
回复
很很感谢了,二楼三楼说的都对,忘记了字符串是不可以直接复制的
不过我还有一个小小的问题想请教
想把输入的记录写入文件,其它的都好了,就是不知道fprintf()函数该怎么写了,
如下面代码中注释所示. 请指教...


#include <stdio.h>
#include <malloc.h>
#include <string.h>
struct goo
{
int Student_number;
char name[20];
char sex[10];
};
typedef struct node
{
struct goo data;
struct node *link;
}linklist,Node;

void add(linklist*);
void show(linklist*);

void main()
{
linklist *head;
int i,n;
FILE *fp;
fp=fopen("学生记录.txt","w+");
head=(linklist*)malloc(sizeof(linklist));
head->link=NULL;
printf("请输入要输入的记录的条数:");
scanf("%d",&n);
for(i=1;i<=n;i++)
add(head);
printf("\n");
show(head);
fprintf( );//想在这里用个fprintf()把刚才输入的数据写入"学生记录.txt"这个文件,不会弄了,请问该怎么做呢?请指教!
fclose(fp);
}

void add(linklist* head)
{
Node *q;
int sn;
char n[20],s[10];
q=(Node*)malloc(sizeof(Node));
printf("Please enter student number:");
scanf("%d",&sn);
q->data.Student_number=sn;
printf("Please enter name:");
scanf("%s",&n);
strcpy(q->data.name,n);
printf("Please enter sex:");
scanf("%s",&s);
strcpy(q->data.sex,s);
q->link=head->link;
head->link=q;
}

void show(linklist *head)
{
Node *p;
p=head->link;
while(p!=NULL)
{
printf("Student number:%d\t\t",p->data.Student_number);
printf("name:%s\t",p->data.name);
printf("sex:%s\n",p->data.sex);
p=p->link;
}
}
ValentinsLee 2012-04-16
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <malloc.h>
#include "string.h" //添加头文件
struct goo
{
char Student_number[10]; //这里是char型
char name[20];
char sex[10];
float money;
};
typedef struct node
{
struct goo data;
struct node *link;
}linklist,Node;

void add(linklist*);
void show(linklist*);
void main()
{
linklist *head;
head=(linklist*)malloc(sizeof(linklist));
head->link=NULL;
add(head);
show(head);
}

void add(linklist* head)
{
Node *q;
char sn[10];
char n[20],s[10];
q=(Node*)malloc(sizeof(Node));
printf("Please enter student number:");
scanf("%s",&sn); //输入用%s,不是%d
strcpy(q->data.Student_number,sn); 字符串不能直接复制,用strcpy拷贝.
printf("Please enter name:");
scanf("%s",&n);
strcpy(q->data.name,n); 字符串不能直接复制,用strcpy拷贝.
printf("Please enter sex:");
scanf("%s",&s);
strcpy(q->data.sex,s); 字符串不能直接复制,用strcpy拷贝.
q->link=head->link;
head->link=q;
}

void show(linklist *head)
{
Node *p;
p=head->link;
while(p!=NULL)
{
printf("Student number:%s\n",p->data.Student_number);
printf("name:%s\n",p->data.name);
printf("sex:%s\n",p->data.sex);
p=p->link; //指针后移,这个你在show的时候没有加.
}
}


hen_hao_ji 2012-04-16
  • 打赏
  • 举报
回复
加#include<string.h>头文件,add函数改成下面这样:

void add(linklist* head)
{
Node *q;
char sn[10];
char n[20],s[10];
q=(Node*)malloc(sizeof(Node));
printf("Please enter student number:");
scanf("%s", sn); //要用%s吧,字符数组
strcpy(q->data.Student_number,sn);
printf("Please enter name:");
scanf("%s",n);
strcpy(q->data.name,n);
printf("Please enter sex:");
scanf("%s",s);
strcpy(q->data.sex, s);
q->link=head->link;
head->link=q;
}

hen_hao_ji 2012-04-16
  • 打赏
  • 举报
回复
要错的地方用 strcpy()函数,字符数组不能直接 赋值

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧