gpt4 book ai didi

c - 使用 scanf 动态数据结构

转载 作者:行者123 更新时间:2023-11-30 16:02:45 26 4
gpt4 key购买 nike

我有一个非常基本的问题,感谢您的耐心等待。

我有一个动态数据结构,只有一个整数值和一个指向下一个结构的指针。我使用 scanf 获取用户输入以获取 5 个值以添加到结构中,并尝试在最后打印输出。我在将输入输入到结构中时遇到语法问题。我浏览了 StackOverflow 和 Google,但没有结果(可能是因为它太基础了!)

这是代码:

#include <stdio.h>

struct List
{
int value;
struct List *nextaddr;
};

int main()
{
int int1, int2, int3, int4, int5;

printf("please enter the first integer: ");
scanf("%d", int1);
struct List t1 = {int1};

printf("please enter the second integer: ");
scanf("%d", int2);
struct List t2 = {int2};

printf("please enter the third integer: ");
scanf("%d", int3);
struct List t3 = {int3};

printf("please enter the fourth integer: ");
scanf("%d", int4);
struct List t4 = {int4};

printf("please enter the fifth integer: ");
scanf("%d", int5);
struct List t5 = {int5};

struct List *first;

first = &t1;
t1.nextaddr = &t2;
t2.nextaddr = &t3;
t3.nextaddr = &t4;
t4.nextaddr = &t5;
t5.nextaddr = NULL;

printf("%i\n%i\n%i\n%i\n%i\n",first->value,t1.nextaddr->value,t2.nextaddr->value,t3.nextaddr->value,t4.nextaddr->value);

return 0;
}

如何将用户输入输入到结构中?

最佳答案

一些事情-

通常,当使用链表等链接结构时(正如本例所示),您可以使用 malloc 在堆上而不是在堆栈上为对象分配内存。其背后的基本原理是,您希望链接结构的元素比创建它们的函数生命周期更长,因此堆栈分配各个单元不太可能正常工作。您可能想通过编写类似的内容来创建结构

struct List* entry = malloc(sizeof(struct List));

作为后续,由于从用户读取链接列表单元格的内容并将其添加到列表中的逻辑对于您正在读取的每个单元格都是相同的,因此您可能不想只复制为其编码五次。相反,考虑编写这样的函数:

struct List* ReadListEntry(void) {
struct List* entry = malloc(sizeof(struct List));
/* ... initialize 'entry' ... */

return entry;
}

这样,您的 main 中的代码可以缩短五倍,并且如果您发现代码中的任何错误(正如您似乎所做的那样),您只需要更改它一次,而不是五次。

至于你原来的问题,我认为问题在于你正在写

scanf("%d", myValue);

而不是

scanf("%d", &myValue);

第一个版本不正确,可能会导致运行时崩溃。 scanf 假定您在使用 %d 格式说明符时提供指向整数的指针作为参数,而不是整数,所以显式的&符号可能是伤害你的原因。

将其与上述想法相结合,使用辅助函数来生成堆分配的列表单元,您可能需要尝试编写如下函数:

struct List* ReadListEntry(void) {
struct List* entry = malloc(sizeof(struct List));

scanf("%d", &entry->value);
entry->nextaddr = NULL;

return entry;
}

鉴于此,您可能可以重写您的 main 函数,使其比现在的函数简单得多。我将把它作为练习留给读者。 :-)

希望这有帮助!

关于c - 使用 scanf 动态数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4942125/

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