1

我想要做的是从一个只有正整数的文件中读取,然后对整数进行排序并输出它们。

问题是我不知道我试图从中读取的文件有多少行(每行都有一个数字)。

即使我不知道会有多少数字,有没有办法将数字存储在地址/数据寄存器中?

编辑:将解释更多。数据文件的输入可能少于 14 个,问题是,如何在不对每个单独的寄存器进行硬编码的情况下将 <14 个数字放入不同的寄存器?

4

1 回答 1

1

如果您正在读取文件,操作系统将为您提供“文件结束检查”。如果逐行阅读,很容易数行;EndOfFile 检查为真时行计数器所说的总行数。

存储这组数字,您可能需要一个足够大的连续存储块。您可以提前确定最大大小,并简单地静态声明一个足够大的缓冲区。

另一种方法是动态分配内存(请参阅对 Malloc 的调用或操作系统提供的类似内容)以容纳比您期望的更大的内存量,并将值填充到该空间直到它满为止。如果文件还有更多,分配一个更大的块,复制从旧块收集的值,释放旧块,然后继续。一个简单的规则是最初分配您认为是 2 sigma 乘以您期望的平均值的数量(例如,如果您认为文件通常包含 100 个值,您可能最初分配 150 个插槽的缓冲区)以处理大多数情况初始分配。如果您需要重新分配,则将您分配的最后一个缓冲区的大小加倍(例如,切换到 300、600、...)。这使得重新分配开销非常低。

第三种选择是在一组固定大小的缓冲区中收集您的值,例如,为每个新块分配 100 个插槽)并在您阅读时填充它们。您现在有一组缓冲区(您可以将它们链接到一个线性列表中,或者使用上一段中的技术构建一个数组来跟踪它们)。这有使你的排序复杂化的缺点,所以我认为这不是最好的方法。

于 2013-03-04T18:46:51.020 回答