Я пытаюсь прочитать в текстовом файле в связанном списке и успешно его отобразить. Но я продолжаю получать сообщение «List is Empty», которое соответствует (head == NULL), в то время как я могу успешно прочитать и распечатать в файле один раз с помощью аргумента puts (id -> ...) в функции чтения но я не могу перейти к функции отображения, как я уже упоминал выше.Чтение и отображение связанных списков через текстовый файл
struct node
{
char name[50];
int id;
struct node *next;
} *head;
int main()
{
int i,num;
struct node *r;
head=NULL;
readfile(*r);
while (1)
{
printf("\nList Operations\n");
printf("============\n");
printf("1.Insert\n");
printf("2.Display\n");
printf("3.Delete by ID\n");
printf("4.Delete by Name\n");
printf("5.Exit\n");
printf("Enter your choice: ");
if (scanf("%d", &i) <= 0){
printf("Enter only an integer\n");
exit(0);
} else {
switch(i)
{
case 1:
if(head==NULL)
{
printf("List is Empty\n");
}
else
{
printf("Element in the list are: ");
}
display(r);
break;
case 2:
return 0;
default:
printf("Invalid Choice\n");
}
}
}
void readfile(struct node *r)
{
r=head;
char str[50];
int id;
FILE *ifp=fopen("One.txt","r");
while (fgets(str,50,ifp)!=NULL){
r =(struct node *)malloc(sizeof(struct node));
char *token=strtok(str,",");
strcpy(r->name,token);
puts(r->name);
token=strtok(NULL,"\n");
r->id=token;
puts(r->id);
r->next=NULL;
r=r->next;
}
}
void display(struct node *r)
{
r = head;
if(r == NULL)
{
return;
}
while(r != NULL)
{
printf("Student %s has id %d.\n", r->name,r->id);
r = r->next;
}
printf("\n");
}