int main (int argc, char *argv [])
{
char a = 'v';
for (int i = 0; a != 'x'; )
{
printf("Enter 'a' : ");
scanf("%c",&a);
}
return 0;
}
我运行了它并提供了输入 k。当我在此之后按回车键时,为什么我的 printf
当循环运行第二次时运行 2 次strong>?
最佳答案
要理解这种行为,我们可以逐步模拟执行。
printf("Enter 'a' : ");
scanf("%c",&a); // User type in example 'a' and presses enter.
scanf
"bufferize"a\n
并在 a
中放置值 'a'
不满足循环条件,因为 'a' == 'x'
为 false
printf("Enter 'a' : ");
scanf("%c",&a); // The buffer still contains `'\n'`
由于缓冲区仍然包含未使用的数据,下一个字符 ('\n'
) 被放置在 a
中并且循环继续。
不满足循环条件,因为 '\n' == 'x'
为 false
printf("Enter 'a' : ");
scanf("%c",&a); // The buffer is empty now.
这给您一种错觉,即循环显示两次 printf
,但实际上,scanf
在不需要用户输入的情况下一直读取缓冲区。
如果输入更多字符,例如qwerty
,"Enter 'a' : "
会显示7次,因为"qwerty"
包含 6 个字符 + '\n'
请注意,使用 while (a != 'x')
比 for (int i = 0; a != 'x'; )
更适合您的需求
关于c - printf ("Enter ' a' : "); runs 2 times after 1st loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58080582/