2013-03-04 78 views
1

我想要做的是从只有正整数的文件中读取,然后对整数进行排序并输出它们。如何存储未知数量的数字

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

是否有存储在地址号码的方式/数据寄存器,即使我不知道有多少数字会有?

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

+0

听起来像是你要么需要一些动态的数据结构或者 - 如果你必须使用一个静态分配的结构 - 把帽子放在你可以读取的最大行数。 – 2013-03-04 18:44:03

+1

为什么你需要把所有的数据放入寄存器?数量有限的寄存器。为什么不把数据读入静态或动态缓冲区?如果您不熟悉这一点,您可能需要查看间接寻址。 – 2013-03-08 23:37:22

回答

1

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

商店这组数字,你可能想要一个足够大的连续存储块。您可以提前决定最大大小,只需静态声明一个足够大的缓冲区。

另一种方法是动态分配内存(见对malloc或类似的东西操作系统提供话费)持有一定量的比你所期望的大,填充值成的空间,直到填满。如果文件还有更多内容,则分配一个较大的块,将迄今为止收集的值复制到旧块中,释放旧块并继续。一个简单的规则是最初分配您认为是您所期望的平均值的2西格玛倍数(例如,如果您认为文件通常包含100个值,那么您最初可以分配150个插槽的缓冲区)来处理大多数情况初始分配。如果您需要重新分配,请将您分配的最后一个缓冲区的大小加倍(例如,切换到300,600 ......)。这使重新分配开销非常低。

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

相关问题