This question already has an answer here:
using scanf(“%d ”) with a space after the %d
(1个答案)
23天前关闭。
如果我像下面这样编码
然后输入“ 1 2 3”,输出为
我知道这是因为输入时缓冲区一次包含1、2、3
但是,当我在scanf处将空间从“%d”添加到“%d”并像以前一样输入相同的内容“ 1 2 3”时,
输出是
用“%d”进行少量更改后,它并没有像以前那样继续前进
为什么会这样?
(1个答案)
23天前关闭。
如果我像下面这样编码
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”进行少量更改后,它并没有像以前那样继续前进
为什么会这样?
最佳答案
C语言中scanf的“%d”和“%d”之间的差异
区别在于,当您使用“%d”作为格式字符串时,scanf()
继续使用空白字符,直到遇到另一个非空白字符,例如2,3,4。输入数字之后的简单换行符\n
或另一个空格字符不会破坏使用。
而当您在格式说明符之后仅使用“%d”时不带空格时,则使用诸如换行符\n
之类的空格字符可以避免使用。
用“%d”进行少量更改后,它并没有像以前那样继续前进
为什么会这样?
原因是因为scanf("%d ", &num);
在for循环的第三个遍历中消耗了3
之后,仍在消耗尾随空白,直到找到另一个字符为止。
不打印3
,因为scanf()
仍然很消耗。在这种情况下,只有输入其他字符(例如4
),整个程序才会完成。这将起作用,因为for循环的主体仅有3个演练。如果它有更多的功能,那将甚至行不通。在使用此类程序进行for循环的演练时,您需要在stdin
中再包含一个字符。
09-30 15:53