为什么链表C语言main函数里面加入for循环却在第二次输入的时候会停止运行,导致循环不成功?

#include "stdio.h"
#include "stdlib.h"

typedef struct employee
{
int no;
char *name;
}emp;

typedef struct node
{
emp data;
struct node *next;
}SLink;

SLink *initailList()
{
SLink *p=(SLink *)malloc(sizeof(SLink));
p->data.no=0;
p->data.name="opop";
p->next=NULL;

return p;
}

//插入新结点
void addNewNoteAtStart(SLink * &L)
{
SLink *t=(SLink *)malloc(sizeof(SLink));

printf("请输入工号:");
scanf("%d",&t->data.no);
printf("请输入姓名:");
scanf("%s",t->data.name);
t->next=NULL;

t->next=L;
L=t;

}

//结点的遍历,将所有结点内容输出来
void showAll(SLink *H)
{
SLink *t;
t=H;
while(t!=NULL)
{
printf("\n工号:%d,姓名:%s\n",t->data.no,t->data.name);

t=t->next;
}
}

int main()
{
SLink *list;
list=initailList();

for(int i=0;i<3;i++)
addNewNoteAtStart(list);
showAll(list);

}

这个程序不会停止运行,只会等待输入,你继续输入就可以了;
可以在scanf之后价格打印把输入的内容取出来就知道了。
基本上都是由于终端输入的回车之类干扰的scanf的结果。追问

结果是这样的?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-03-09
typedef struct employee
{
int no;
char *name;
}emp;
scanf取得的输入值需要存入一个char[]类型的变量中,结构体中char * name只是一个指针,未给变量分配地址,因此无法保存你输入的字符串,需要在给字符串分配一个空间保存字符串,并把指针指向它。
initailList中的p->data.name="opop"中"opop"是常量,c语言会自动分配内存,并将地址赋给指针。追问

那请问应该怎么改,让他能够循环输入运行呀

追答

添加节点函数改成这样:
void addNewNoteAtStart(SLink * &L)
{
SLink *t=(SLink *)malloc(sizeof(SLink));
t->data.name = (char *)malloc(255);
printf("请输入工号:");
scanf("%d",&t->data.no);
printf("请输入姓名:");
scanf("%s",t->data.name);
t->next=NULL;

t->next=L;
L=t;
}

本回答被提问者采纳