【问题标题】:How to store a sequence of numbers whose size is not know in advance in C?如何在C中存储预先不知道大小的数字序列?
【发布时间】:2019-03-08 02:40:52
【问题描述】:

我正在使用 C 语言编写标准差程序,但对预期的输入有困难。

我必须接受未知数量的浮点数,但我不知道如何存储它们并为它们分配内存。

示例输入:

82.5 1000.6699 10 11.11 -45 #

感谢任何建议。

新用户,小错误见谅

【问题讨论】:

  • 在数学上可以计算一个数字列表的标准偏差而不存储它们。如果您知道需要为这些数字积累哪些信息,则可以一次性完成数学运算。
  • 永远不要发布图片,或者更糟糕的是,当它只是文本时,只是一个链接。改为添加文本。
  • (0) 您说您必须接受“未知数量的整数”,但您的示例数据显示非整数。您必须澄清问题陈述。 (1)您说您需要计算一系列数字的标准偏差并询问是否将它们存储在内存中,但没有必要存储数字来计算它们的标准偏差(根据我上面的评论)。项目分配是否明确要求您将数字存储在内存中? (2) 您说您的程序必须使用argv 接受输入,但还说输入由换行符分隔。 argv传递的参数...
  • ... 通常不包含换行符。通常,换行符出现在文件流的输入中。您应该从哪种方式获取输入?是否所有输入都来自argv?以什么格式?或者是从标准输入中读取的数字?还是来自文件? argv 有什么东西吗?也许是一些数字或要读取的文件名?

标签: c input malloc


【解决方案1】:

您可以分配一个数组来保存您的值,并且可以使用realloc() 来扩大该数组。

因为realloc() 有一些开销,我可能会为 16 个值分配足够的内存。当你填充它时,然后调整它的大小以容纳额外的 16 个值,依此类推。这样,您的代码就不会为每个值调整内存大小。

【讨论】:

  • 谁在不评论问题的情况下否决答案?
【解决方案2】:

实际上只有两种方法。首先是定义一个struct

typedef struct {
    int value;
    element* next;
} element;

然后,您就有了所谓的链表。您可以通过遍历链接的element 结构来访问第n 个元素,并且您知道当element.next 是空指针(并且element->next 是SegFault 或返回废话)时您已经到达终点。

第二种方法是“安全行事”并定义一个固定长度的数组,这是您需要的最大大小。比如:

int my_array[65535];

这是有利的,因为数组比链表快得多(您不必迭代来访问第 n 个元素),但如果数组长度变化很大,这可能会分配比必要更多的内存。由你决定。

【讨论】:

  • 第三种选择是只存储刚刚读取的那个。在 OP 的情况下不需要列表。
  • (0) 实际上并不只有两种方法。 (1)这个简单的问题不需要链表,会很浪费。 (2) 一个固定“最大”大小的数组不满足接受未知数量输入的问题要求。
猜你喜欢
  • 1970-01-01
  • 2010-12-11
  • 2012-10-14
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多