C - 链接列表 - 插入元素未更新 - 仅添加最后一个输入元素

2023-11-29

PREFACE:目标是提示用户输入,将每个元素(输入行)添加到链接列表中。

我一直在玩一些示例代码学习C.org,它显示了一个链表示例。 我修改了代码,使其采用“字符串”而不是整数。

My insert函数如下:

void push(node_t * head, char *data) {
    node_t * current = head;

    if(head == NULL) {
      printf("First element ever!\n");
    }
    else if(current->data == NULL) {
      current->data = data;
      current->next = NULL;

    }
    else {
      while (current->next != NULL) {
        current = current->next;
        }
      current->next = malloc(sizeof(node_t));
      current->next->data = data;
      current->next->next = NULL;
   }
}

现在,在 MAIN 中,我按如下方式启动列表:

node_t * test_list = malloc(sizeof(node_t));

添加元素是通过以下方式完成的:

  push(test_list, "FOO");
  push(test_list, "FEE");
  push(test_list, "FAA");

打印列表时,使用打印列表(测试列表),我得到以下输出:

FOO
FEE
FAA

PROBLEM

但是,我随后添加了一个 while 循环,提示用户输入并将其添加到链接列表中。

char command[120];
int counter = 0;
while(counter < 3) {
    printf("Enter element: ");
    fgets((void *)command, sizeof(command), stdin);
    push(test_list, command);   //Insert
    counter++;
}

但是,这不会将每个元素添加到链接列表中。相反,它将 LAST 元素添加到列表中三次。

例如,当提供:

Enter element: Argentina
Enter element: Mexico
Enter element: Sweden

该列表打印如下:

FOO
FEE
FAA
Sweden
Sweden
Sweden

EDIT(新增打印功能)

My print函数如下:

void print_list(node_t * head) {
    node_t * current = head;

    printf("**** Printing list ****\n");
    while (current != NULL) {
        printf("%s\n", current->data);
        current = current->next;
    }
}

我缺少什么,或者:我该如何解决这个问题?非常感谢任何帮助。


Use strdup返回在堆上分配的字符串的副本。

strdup() 函数返回一个指向新字符串的指针,该新字符串是字符串 s 的重复项。新字符串的内存是通过 malloc(3) 获得的,并且可以通过 free(3) 释放。

node_t *test_list = malloc(sizeof(node_t));
test_list->next = NULL;
test_list->data = NULL;
while(counter < 3) {
  printf("Enter element: ");
  fgets((void *)command, sizeof(command), stdin);
  push(test_list, strdup(command));   //Insert
  counter++;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C - 链接列表 - 插入元素未更新 - 仅添加最后一个输入元素 的相关文章

  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • ListSelector适用于整个列表

    我有一个带有列表选择器的简单列表 如下所示
  • 尝试安装 Homebrew 时出现库未加载错误 (libidn.11.dylib)

    尝试在 Lion 上安装 Homebrew 当我做 usr bin ruby e curl fsSL https raw github com gist 323731 我收到此错误 dyld Library not loaded opt l
  • 记录 Jenkins 中的更改

    在这里继续我的问题 Jenkins 在外部可执行文件上的构建通过或失败 我的构建过程现在使用 MS Build 从源代码构建 并作为构建过程的一部分执行自定义程序 我在程序中写入控制台的任何内容都将记录在控制台输出中 但是 我还想在用户界面
  • C 将 argv[] 中的字符串分配给 char 数组

    我有以下代码 它从命令行读取文件名并打开该文件 include
  • setcookie,无法修改标头信息 - 标头已发送[重复]

    这个问题在这里已经有答案了 我是PHP新手 刚刚练习PHP setcookie 失败了 http localhost 测试 索引 php
  • 如何将 DNS 条目添加到 Windows 容器的主机文件中?

    我的主机的 IIS 中有一个网站 可以通过以下方式访问http mysite local地址 我还有一个在此主机上运行的 Windows 容器 我正在尝试使用 curl http mysite local 从我的 Windows 容器连接到
  • 使用 NDEF Android 应用程序记录 (AAR) 获取 NFC 标签

    我正在开发 NFC 应用程序 为了启动我的应用程序 我使用了 NDEF 标签 其中包含 AAR NDEF 记录 这很好用 但现在我想直接用应用程序读取标签内容 我怎样才能做到这一点 当我从手机上取下标签并再次触摸它时 它已经可以工作了 但我
  • 映射超类的命名查询

    我试图在映射的超类上声明 NamedQuery 但收到此错误 org hibernate hql ast QuerySyntaxException VoipCall 未映射 select v from VoipCall v where v
  • TinkerPop:添加顶点图 API 与遍历 API

    背景 在其中之一SO posts推荐使用 Traversal API 而非 Graph API 来进行变异 所以我尝试了一些测试 发现 Graph API 似乎更快 我完全相信这个建议 但我试图了解它如何更好 我确实尝试过谷歌搜索 但没有找
  • cout 是同步/线程安全的吗?

    一般来说 我假设流不同步 由用户来执行适当的锁定 但是 做类似的事情cout在标准库中得到特殊待遇 也就是说 如果多个线程正在写入cout他们会腐败吗cout目的 我知道即使同步 您仍然会得到随机交错的输出 但交错是否有保证 也就是说 使用
  • 在 Python 中从 CSV 文件访问列数据

    我有一个包含 A B C D 列和 N 行的 CSV 文件 问题是这些列中的数据长度不同 即有些是 4 5 有些是 4 52 我的问题分为两部分 我如何从 csv 文件访问这些列 我使用此代码来打印 csv 文件的内容并将它们读入数组 im
  • React 中的 Markdown 与 Typescript

    有没有办法使用 Typescript 解析 React 中的 Markdown 我正在尝试做这样的事情 import as ReactMarkdown from react markdown OR import ReactMarkdown
  • 数据和同步 - 手动同步邮件。日历和联系人

    我正在尝试编写一个应用程序 只需单击一下即可同步我的邮件和日历 在浏览这个论坛后 我发现了一些很好的提示 并编写了一个简短的测试应用程序 该应用程序使用我的第一个谷歌帐户并开始同步 到目前为止 代码正在运行 但目前仅同步了联系人 Accou
  • 从Python列表继承后重写append方法

    我想创建一个只能接受某些类型的列表 因此 我尝试从Python中的列表继承 并重写append 方法 如下所示 class TypedList list def init self type self type type def appen
  • 如何在 JavaScript 中查找文本框中的单词

    我正在制作一个类似于 Google Now 应用程序的网站 我想知道如何让 JavaScript 在文本框中查找某个单词 例如 如果有人在文本框中输入 显示天气 JavaScript 世界会看到关键字 天气 它会向我显示天气 这是我的代码
  • 错误:SQLite 从文件导入数据

    我正在尝试从以逗号分隔的文件加载数据 例子 A positive 9619 A095CDB461A1FEED positive 1 当我尝试在 sqlite3 数据库中加载此文件时 出现错误 sqlite gt mode csv featu
  • Google 地图屏幕截图不适用于使用 html2canvas 的标记和标记集群

    我正在使用 Flask 做 python 项目 其中我使用 google 地图 api 来显示项目中的地图 我实施html2canvas脚本成功捕获地图 但我在地图上也有标记 但它没有捕获 所以我尝试使用html2canvasPython代
  • 向下滚动时替换 div 中的图像

    想要在向下滚动和向上滚动时用图像 resized png 替换 logo 中的图像应恢复正常 尝试使用代码
  • 使用 viewpager 滑动图像(不是布局)

    我的代码的作用 这是我的代码 用于在 xml 布局 名为 left xml right xml 和 center xml 之间滑动的 viewpager 我想要它做什么 我想在图像之间滑动 存储在可绘制文件夹中 当我用 R drawable
  • C - 链接列表 - 插入元素未更新 - 仅添加最后一个输入元素

    PREFACE 目标是提示用户输入 将每个元素 输入行 添加到链接列表中 我一直在玩一些示例代码学习C org 它显示了一个链表示例 我修改了代码 使其采用 字符串 而不是整数 My insert函数如下 void push node t