【发布时间】:2020-07-29 06:43:46
【问题描述】:
假设数组的max_size 是100,我试图将scanf 用户输入到数组中,直到输入EOF。当函数检测到 EOF 时,scanf 停止并返回到目前为止输入的元素数。
int read_ints_from_stdin(int array[], int max_array_size) {
int i = 0, num;
while ((scanf("%d", &num) != EOF) && i < max_array_size) {
array[i++] = num;
printf("value of i is: %d \n", i);
}
return i;
}
但是,i 一直在增加,直到 max_array_size 并且即使我输入了 EOF,该函数也始终返回 100。谁能帮我解决这个问题?
编辑:显然,我将随机值存储到我的数组中,而不是用户输入的内容。
【问题讨论】:
-
EOF在 stdio.h 中定义(通常为-1)。在 linux 上,ctrl+d发出 EOF 信号,而在 Windows 上,ctrl+z通过 shell 发送到进程 stdin。你做了其中之一吗? -
我实际上在我的系统上打印了 EOF,它给了我 -1。所以我一直在我的输入中使用 -1 作为 EOF
-
"我已经进入 EOF" 怎么办?你到底输入了什么?请注意,如果您键入一个非数字,
scanf将返回 0 并将有问题的字符留在流中,因此它永远不会返回 EOF。我在这里建议== 1而不是!= EOF。