makenode()
тип возврата - void
, он должен быть NODE*
.
printList()
не обрабатывает список, поэтому он не может знать, что печатать, более того, ptr
- NULL
, поэтому он никогда не попадет в печать l oop.
Фиксированный код с комментариями:
Живая демонстрация
#include <stdlib.h>
#include <stdio.h>
typedef struct Node {
int a, b;
struct Node *next;
} NODE;
NODE* makenode() { //return type NODE*
NODE *node1 = malloc(sizeof(*node1));
printf("enter the name : ");
scanf("%d", &node1->a);
printf("enter the sur name : ");
scanf("%d", &node1->b);
node1->next = NULL;
return node1;
}
void printList(const NODE *ptr) { //pass NODE* ptr as an argument
int i = 1;
while (ptr != NULL) {
printf("Node %d\n", i++);
printf("a: %d\n", ptr->a);
printf("b: %d\n", ptr->b);
ptr = ptr->next;
}
}
int main() {
//make first node
NODE *head = makenode(); //assing node
// add one more node
NODE* node = makenode();
head->next = node; //chain second node
printList(head); //print nodes
return EXIT_SUCCESS;
}
С другой стороны:
Странно, что имена int
, а не строки.
Вы может сделать:
Живая демонстрация
typedef struct Node {
char name[100]; //names as strings
char surname[100];
struct Node *next;
} NODE;
NODE* makenode() { //return type NODE*
NODE *node1 = malloc(sizeof(*node1));
printf("enter the name : ");
scanf(" %99[^\n]", node1->name);
printf("enter the sur name : ");
scanf(" %99[^\n]", node1->surname);
node1->next = NULL;
return node1;
}
void printList(const NODE *ptr) { //pass NODE* ptr as an argument
int i = 1;
while (ptr != NULL) {
printf("Node %d\n", i++);
printf("Name: %s\n", ptr->name);
printf("Surname: %s\n", ptr->surname);
ptr = ptr->next;
}
}
//...
//main is the same