c - 无法打印链表

标签 c struct linked-list

我无法打印整个链表.. 我的错是什么?我是链表的新手..

这是基本结构

struct data {
    int id;
    int age;
    struct data *next;
};

主要功能

int main() {
    int mode;
    struct data *initial;
    struct data *insert;
    struct data *temp;

    insert = initial;
    printf("1. Insert\n5. Print List\n");

    while (1) {
        printf("Mode: ");
        scanf("%d", &mode);
        if (mode == 1) {
            insert = malloc(sizeof(struct data));

            printf("Id: ");
            scanf("%d", &(insert->id));

            printf("Age: ");
            scanf("%d", &(insert->age));

            insert=insert->next;
        } else if (mode == 5) {
            temp = initial;
            while (temp != insert) {
                printf("Id: %d\tAge: %d\n", temp->id, temp->age);
                temp = temp->next;
            }
        }
    }
}

谢谢你的帮助。

最佳答案

您永远不会将 initial 初始化为任何东西,甚至不是 NULL0,因此您无法明智地从中追逐一个列表。

您还需要在两次 scanf() 调用之后和赋值之前设置 insert->next = NULL; insert = insert->next; 。您需要以某种方式将 insert 挂接到原始列表中;可能在 struct data *initial = 0; 声明时和 if (initial == 0) initial = insert;insert = insert->next 之前;

您还需要做更多的错误检查:scanf()malloc() 都可能失败,当它们失败时您应该做一些明智的事情。

关于c - 无法打印链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23637778/

相关文章:

struct - 结构中枚举的生命周期参数

json - 编码/解码后的结构变化

C - 从二进制文件读取到任何结构

c - 使用ADT的链表问题

c++ - 如何在启用显示隐藏文件和文件夹的情况下使用 C\C++ 隐藏

c++ - 如果我在同一语句中使用预增量和后增量会怎样?

c - 错误 : attempt to use poisoned "SIG_OUTPUT_COMPARE0A"

c - 你如何防止名称在 C 中发生冲突

C++链表追加方法

c - 如何在不交换数据的情况下交换两个节点