如果我像下面这样编码
int main()
{
int num;
for(int i = 0; i < 3; i++)
{
printf("enter an integer\n");
scanf("%d", &num);
printf("%d\n", num);
}
return 0;
}
然后输入“1 2 3”,输出为
enter an integer
1 2 3
1
enter an integer
2
enter an integer
3
我知道这是因为输入时缓冲区一次包含1,2,3
但是,当我在 scanf 中添加从“%d”到“%d”的空格并像以前一样输入相同的内容“1 2 3”时,
输出为
enter an integer
1 2 3
1
enter an integer
2
enter an integer
它并没有像以前那样继续进行,只是用“%d”进行了小改动
为什么会发生这种情况?
最佳答案
Difference between “%d” and “%d ” at scanf in C language
不同之处在于,当您使用“%d”作为格式字符串时,scanf()
会继续使用空白字符,直到遇到另一个非空白字符,例如 2 ,3,4。输入数字后的简单换行符 \n
或另一个空白字符不会破坏消费。
而当您仅在格式说明符后使用不带空格的“%d”时,空格字符(例如换行符\n
)会破坏使用。
It didn't keep going like before with small change with "%d "
Why does this happen?
原因是因为 scanf("%d ", &num);
在 for 循环的第三次演练中消耗了 3
后,仍然在消耗尾随空格直到找到另一个字符。
3
未打印,因为 scanf()
仍在消耗。在这种特定情况下,只有输入另一个字符(例如 4
),整个程序才会完成。这是可行的,因为 for 循环只有 3 个循环体。如果它有超过这个甚至不起作用。您需要在 stdin
中多一个字符,因为您已经演练了此类程序的 for 循环。
关于c - C语言中scanf处 "%d"和 "%d "的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59856844/