Как распечатать введенные данные? - PullRequest
1 голос
/ 17 июня 2020

В качестве практики для выпускного экзамена я использую связанный список. Но теперь я застрял при печати входных данных в моем коде. Я составил этот связанный список и хочу распечатать входные данные. Но мой код ничего не печатает.

Что не так с моим кодом?

#include <stdio.h>
#include <stdlib.h>

typedef struct Node{
    int a,b ;
    struct Node* next;
}NODE;

void makenode()
{
    int a;
    int b;

    printf("enter the name : ");
    scanf("%d",&a);
    printf("enter the sur name : ");
    scanf("%d",&b);

    NODE* node1=malloc(sizeof(NODE));

    node1->a=a;
    node1->b=b;
    node1->next=NULL;

    return node1;

}

void printList()
{
    NODE *ptr=NULL;
    while(ptr!=NULL){
        printf("%d", ptr->a);
        printf("%d", ptr->b);
        ptr = ptr->next;
    }
}

int main()
{
    NODE *head = malloc(sizeof(NODE));
    head->next=NULL;
    makenode();
    printList();
    return 0;
}

1 Ответ

1 голос
/ 17 июня 2020

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...