リンクリストのコードを書きました:
#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 モードから抜け出せません)。2 番目の要素以降は、名前を取得するように求められず、「Enter」をスキップします。 name" を入力し、手動で \n を入力する必要がある ID を要求します。リンクされたリスト要素を表示している間、最初の名前は表示されますが、2 番目以降の名前は \n と表示されます。私はすでに fflush(stdin) を使用しています。なぜそのような行動をするのか教えてください。o/pの写真を添付しました。
ありがとう