gpt4 book ai didi

c - 链表初学者

转载 作者:行者123 更新时间:2023-11-30 14:42:42 25 4
gpt4 key购买 nike

我刚刚开始学习链表,在创建一个读取链表的函数时遇到问题。当我从开关中选择读取功能时,它会变成空白,什么也不会发生(如果我将代码放在 main () 中,它将起作用)。我做错了什么?

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

struct nod
{
int nr;
struct nod *next;
} nod;

int read(struct nod *p)
{
while(p->next != NULL )
{
printf("%d", p->nr);
p=p->next;
}

printf("%d", p->nr);
}

int main()
{
struct nod* trei = NULL;
struct nod* unu = NULL;
struct nod* doi = NULL;
struct nod* p = NULL;
struct nod* n = NULL;
unu = (struct nod*)malloc(sizeof(struct nod));
doi = (struct nod*)malloc(sizeof(struct nod));
trei = (struct nod*)malloc(sizeof(struct nod));
p = (struct nod*)malloc(sizeof(struct nod));
n = (struct nod*)malloc(sizeof(struct nod));
unu->nr = 1;
unu->next = doi;
doi->nr = 2;
doi->next = trei;
trei->nr = 3;
trei->next = NULL;
p = unu;
int meniu = 0;
while(1)
{
printf("1. Read list");
scanf("%d", meniu);
switch(meniu)
{
case(2):
read(p);
break;
}
}
printf("%d", p->nr);
}

最佳答案

一些建议,没有完整的修复。

无需将指针初始化为 NULL,只需一步定义和初始化即可。另外,不要从 void* 进行转换,这是 ma​​lloc 返回的内容。 C 允许您隐式地从 void 指针来回转换;每一次转换都是一个犯错的机会。

struct nod* trei = malloc(sizeof(struct nod));
struct nod* unu = malloc(sizeof(struct nod));
struct nod* doi = malloc(sizeof(struct nod));

我不清楚 np 是否需要分配。我认为你的意思是它们指向分配的节点。

您可以使用 c99 语法在一条语句中初始化您的结构。我认为这个表格更加清晰。

*unu = (struct nod) { .nr = 1, .next = doi };
*doi = (struct nod) { .nr = 2, .next = trei };
*trei = (struct nod) { .nr = 3, .next = NULL };

帮自己一个忙,不要调用你的函数read,除非你意味着覆盖标准的read(2)函数。你不正在阅读,你正在报道。也许称之为“打印”。

循环很尴尬。你想要

while(p != NULL )
{
printf("%d", p->nr);
p=p->next;
}

有两个原因:

  1. 防止传递的 p 为 NULL
  2. 打印trei

p指向trei时,p->next为NULL。你不想退出然后循环;您想要打印 trei,分配 p = p->next,并且测试p。然后你可以删除后面的printf("%d", p->nr);循环,正如您必须的那样,因为 p 将为 NULL。 :-)

我没有发现你的“阅读”功能有任何其他问题,没有理由它不会打印您的数据。我会再撒一些 printf语句,并每次调用 fflush(3),以确保您看到他们。我敢打赌你的程序并没有按照你的想法去做。不至于不过,担心。如果你喜欢编程,你会发现它很漂亮普通的。

关于c - 链表初学者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54347945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com