gpt4 book ai didi

c - 为什么scanf可以用for循环读取一行中的多个输入?

转载 作者:行者123 更新时间:2023-11-30 18:17:45 27 4
gpt4 key购买 nike

我想将给定的 n 个值(n 已知)存储在一个数组中,但我不知道该怎么做,所以我查看并找到了这篇文章:C, reading multiple numbers from single input line (scanf?) ,以及这个答案:

int main()
{
int i, size, *v;
scanf("%d", &size);
v = malloc(size * sizeof(int));
for (i=0; i<size; i++)
scanf("%d", &v[i]);
printf("%d %d %d", v[0], v[1], v[2]);
}

我不明白为什么 scanf 可以做到这一点,该函数不应该在循环的每次迭代中要求另一个输入吗?它如何读取一个 int,然后读取另一个 int,依此类推,只要它们之间用空格分隔? scanf 怎么会这样呢?因为看起来不应该。

PS:为了简单起见,我只编写了带有 3 个值的最终打印语句,在“我的情况”中,大小为 3。

提前谢谢您!

最佳答案

当您在控制台上输入一些数字并按 ENTER 键时,您将通过 stdin 向代码提供输入流。您输入的全部内容都保存在该输入流中。所以如果你输入

2 4 6 8

然后按回车键,输入流包含:2 4 6 8

现在,每个 scanfs 只从该输入流中读取(并删除)一个整数,因此在一次 scanf 之后,stdin 输入流现在包含: 4 6 8

额外的输入不会被丢弃,它仍然在输入流中可用,因此您的下一个 scanf 可以出现并从流中抓取下一个整数,下一个,下一个......直到数据输入流中的内容已耗尽。

关于c - 为什么scanf可以用for循环读取一行中的多个输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48531444/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com