【问题标题】:adding values in linked list to a variable将链表中的值添加到变量
【发布时间】:2023-03-17 15:56:01
【问题描述】:

我正在创建 C 程序,通过使用 while 循环遍历来将链表中节点中的值相加。

我编写了以下代码:

#include <stdio.h>

int main (void)
 {
   struct entry
      {
      int            value;
      struct entry   *next;
      };

   struct entry   n1, n2, n3;
   struct entry   *list_pointer = &n1;
   int sum;
   n1.value = 100;
   n1.next  = &n2;

   n2.value = 200;
   n2.next  = &n3;

   n3.value = 300;
   n3.next  = (struct entry *) 0;    // Mark list end with null pointer

   while ( list_pointer != (struct entry *) 0 ) {
        sum += list_pointer->value;
        list_pointer = list_pointer->next;
     }

  printf ("%i\n", sum);


 return 0;
}

但是我得到以下输出:

    33367

而不是得到 600 作为输出

【问题讨论】:

  • 你从未初始化过 sum,所以它的值是未定义的。它包含现在存储它的堆栈上的任何垃圾。你应该做int sum = 0。此外,请不要使用嵌套结构声明,除非您有充分的理由这样做(在这种情况下,您应该将 entry 拉出 main)。
  • 谢谢,现在可以完美运行了 :)
  • @szczurcio:为什么不将此评论作为答案?
  • @alk 完成,感谢您的建议。

标签: c list struct linked-list nodes


【解决方案1】:
  int sum;

在这里,您正在创建一个堆栈变量; C 标准没有说明它的值,实际上它将包含现在存储它的内存位置的任何随机字节。有关这方面的更多信息,请参阅此处:What happens to a declared, uninitialized variable in C? Does it have a value?

你应该明确地将它初始化为零:

  int sum = 0;

另一方面,绝对没有理由在 main 中定义 entry(通常,除非有充分的理由不这样做,否则应避免嵌套结构声明)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 2015-09-25
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    相关资源
    最近更新 更多