【发布时间】:2011-12-11 10:37:36
【问题描述】:
我需要编写一个程序,在运行期间,一组任意大小的整数将作为输入。它们将被空白分隔。最后,给出一个新行,显示输入的结束。如何将它们保存到整数数组中,以便稍后显示它们。我认为这有点困难,因为在编译过程中不知道要输入的值的数量
【问题讨论】:
我需要编写一个程序,在运行期间,一组任意大小的整数将作为输入。它们将被空白分隔。最后,给出一个新行,显示输入的结束。如何将它们保存到整数数组中,以便稍后显示它们。我认为这有点困难,因为在编译过程中不知道要输入的值的数量
【问题讨论】:
听起来像家庭作业。
如果我错了,请纠正我,我会给你更多的提示。
您可以声明一个非常大的数组,该数组可能不会被用户输入填充,然后使用 scanf 或类似的东西来抓取整数,直到您点击“\n”,或者您可以抓取每个整数一次,使用 malloc 和 memcpy 调用的组合来分配内存。第一个选项永远不应该在现实世界的问题中使用,我当然不提倡这种做法,即使你的教科书可能告诉你这样做。
在 K&R 中有一个类似的例子。
这是您在 C 语言中会遇到的典型问题。解决方案通常是两个选项之一。
使用一个足够大的数组来容纳输入。有时,当数据可能非常大时,这是一个糟糕的选择。当您将视频帧或大型文本文件保存到数组时,这是一个坏主意的一个例子。这也使您在旧版本的 Windows 中面临缓冲区溢出攻击。但是,对于较小的(家庭作业)程序,这有时是一个很好的快速破解解决方案,您可以指望用户(即您的教授没有试图破坏您的程序)不输入 1000 个字符。通常这被认为是不好的做法,出于我之前提到的安全原因,请考虑我的第二个选项。
使用动态数组(即 malloc)。这可能是您的教授希望您做的,因为这听起来像是学生第一次学习指针和数组时使用的典型问题。这是一个很好的方法,只要记住在你完成后调用你的内存。这里棘手的部分是你仍然必须提前知道你想要的数组的大小(当然不是在编译时)。
【讨论】: