我要做的是从只有正整数的文件中读取,然后对整数进行排序并输出它们。
问题在于我不知道我试图读取的文件有多少行(每行有一个数字)。
有没有办法将数字存储在地址/数据寄存器中,即使我不知道会有多少数字呢?
编辑:再解释一下。数据文件可能只有少于14个输入。问题是,如何在不对每个寄存器进行硬编码的情况下将< 14数字放入不同的寄存器中?
答案 0 :(得分:1)
如果您正在读取文件,操作系统将为您提供“文件结束检查”。如果你逐行阅读,很容易计算线条;当EndOfFile检查成立时,行计数器所说的行总数。
要存储这组数字,您可能需要一个足够大的连续存储块。您可以提前确定最大大小,并静态地声明一个足够大的缓冲区。
另一种方法是动态分配内存(请参阅对Malloc的调用或类似操作系统提供的内容)以保留比预期更大的数量,并将值填充到该空间直到它满了。如果文件中有更多内容,则分配更大的块,从远旧块中复制到目前为止收集的值,释放旧块,然后继续。一个简单的规则是最初分配您认为的2 sigma乘以您期望的平均值(例如,如果您认为文件通常包含100个值,您可能最初分配150个槽的缓冲区)来处理大多数情况,只需要初始分配。如果需要重新分配,则将分配的最后一个缓冲区的大小加倍(例如,切换到300,600,...)。这使重新分配开销非常低。
第三种选择是在一组固定大小的缓冲区中收集您的值,例如,为每个新块分配100个插槽)并在阅读时填写它们。您现在有一组缓冲区(您可以将它们链接到线性列表中,或者使用上一段中的技术构建一个数组来跟踪它们)。这有使你的排序变得复杂的缺点,所以我不认为这是最好的方法。