我为链表编写了代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student{
char name[256];
int id;
struct student *next;
};
struct student *start;
struct student *last;
void enter(void);
void add( struct student *i,struct student **last);
void display(struct student *first);
int main(int argc, char *argv[])
{
start=last=NULL;
enter();
enter();
enter();
display(start);
system("PAUSE");
return 0;
}
void add( struct student *i,struct student **last)
{
if (!*last){ *last=i; start=i;}
else {(*last)->next=i;*last=i;}
i->next=NULL;
}
void enter(void)
{
struct student *info;
info=(struct student *)malloc(sizeof(struct student));
printf("Enter the name of the student:\n");
fgets(info->name,255,stdin);
fflush(stdin);
// gets(info->name);
printf("Enter the student id:\n");
scanf("%d%",&info->id);
add(info,&last);
}
void display(struct student *first)
{
while(first)
{
printf("\n\n\n\nName: %s\n",first->name);
printf("Id: %d\n", first->id);
first=first->next;
}
}
它确实创建了一个链接列表,但是当我尝试输入值时:它显示
对于第一个元素,它为 id 正确使用名称,我需要在 id 数字之后手动输入 \n(否则它不会退出 scanf 模式),并且从第二个元素开始,它不会提示输入名称,它会跳过“Enter name”并询问 id 我需要在哪里再次手动输入 \n。在显示链表元素时,它确实显示名字,但从第二个名字开始显示\n。我已经使用了 fflush(stdin)。您能否让我知道为什么会出现这种行为?我附上了o / p图片。
谢谢