未知的输入大小

时间:2014-12-07 21:27:50

标签: c malloc

我被要求构建一个接收未知数量的正值和负值的C语言程序,在输入结束时,我不知道什么时候,我需要按输入的顺序打印它们,不包括重复

例如:

Input: 1 8 9 3 3 5 8 -9 1
Output: 1 8 9 3 5 -9

如果不知道输入何时结束,我该怎么办? 另外 - 我如何进行这项运动? 我很乐意找到方向......我知道我们使用malloc函数

3 个答案:

答案 0 :(得分:1)

我宁愿建议使用%d格式说明符(int类型足够?)和单int变量的循环scanf()。你需要检查它的返回值,它应该是一个,除非没有更有效的输入(考虑通过feof检查你需要检测它已经停止的原因)。然后你需要:

  1. 控制您的分配,例如n计数器以及malloc()realloc()来电。例如,为1000个int元素分配空间,但如果您的数组不止于此,则使用realloc()进行更大的分配(依此类推)。请注意,操作系统资源有限,因此某些malloc()realloc()可能会失败
  2. 照顾可能的重复。如果不需要一些节省时间的解决方案,那么只要在遇到下一个号码时扫描整个数组

答案 1 :(得分:0)

您可能会收到EOF(文件结尾)字符。您可以使用此常量来检查它:

//get input

if(input == EOF) {
 // print numbers
}

要在基于UNIX的计算机上进行测试,请在键入所有数字后按Ctrl + D.此命令将发送EOF字符。

答案 2 :(得分:0)

您可以使用realloc来减小数组的大小。

realloc