问题描述
当我运行下面的code,它按预期工作。
When I run the code below, it works as expected.
#include <stdio.h>
int main()
{
char c;
scanf("%c",&c);
printf("%c\n",c);
scanf(" %c",&c);
printf("%c\n",c);
return 0;
}
如果我删除了空间中的第二个 scanf函数
调用( scanf函数(%C,和C);
),计划用的不良行为表现的第二个 scanf函数
扫描的'\\ n'
和输出相同。
If I remove the space in the second scanf
call (scanf("%c",&c);
), program behaves with the undesirable behavior of the second scanf
scanning a '\n'
and outputting the same.
为什么会出现这种情况?
Why does this happen?
推荐答案
这是因为当你输入你的性格在第一scanf函数调用,除了输入字符本身,你还pressed输入(或返回 )。 回车键preSS发出的'\\ n'标准输入是什么是你的第二个电话scanf函数扫描。
That's because when you entered your character for the first scanf call, besides entering the character itself, you also pressed "Enter" (or "Return"). The "Enter" keypress sends a '\n' to standard input which is what is scanned by your second scanf call.
所以第二个scanf函数刚刚获得无论是在你的输入流中的下一个字符并分配给您的变量(即如果你没有在这个scanf函数语句中使用的空间)。因此,举例来说,如果你没有在你的第二个scanf的使用空间和
So the second scanf just gets whatever is the next character in your input stream and assigns that to your variable (i.e. if you don't use the space in this scanf statement). So, for example, if you don't use the space in your second scanf and
您做到这一点:
a<enter>
b<enter>
第一scanf的分配a和第二scanf的分配\\ N
The first scanf assigns "a" and the second scanf assigns "\n".
但是,当你这样做:
ab<enter>
猜猜会发生什么?第一scanf的将分配a和第二scanf的将指派B(而不是\\ n)。
Guess what will happen? The first scanf will assign "a" and the second scanf will assign "b" (and not "\n").
另一种解决方案是使用 scanf函数(%C \\ N,和C);
你的第一个scanf函数声明
Another solution is to use scanf("%c\n", &c);
for your first scanf statement.
这篇关于为什么在我的scanf函数声明的空间有所作为?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!