[英]Compiler doesn't stop on scanf() for input
这是一个小的C代码
#include<stdio.h>
int main()
{
char ch='Y';
while(ch=='Y')
{
printf("\nEnter new value for Y ");
scanf("%c",&ch);
if(ch=='Y' || ch=='y')
// do some work
printf("Y was selected\n");
}
printf("exiting main");
return 0;
}
我第一次输入'Y'作为输入(没有qoutes),循环返回true并第二次进入循环,但这一次它没有在scanf()上停止供用户输入。(请使用为清楚起见,“ Y”)。 输出如下所示:
如此处所示,编译器没有第二次停止输入。 这背后的原因是什么? 提前致谢 !
像这样在scanf中放置一个空格:
scanf(" %c",&ch);
原因是您输入: Y\\n
(使用回车键)
scanf仅读取Y
! 因此,在下一个scanf \\n
仍在缓冲区中并读入!
因此,如果您在阅读新内容之前有一个空格,它会被切掉(看起来像这样:'\\ n')!
'\\n'
自动成为下一次迭代的输入。
为了避免这种情况,请使用getchar()
。 它将处理不需要的'\\n'
。
#include<stdio.h>
int main()
{
char ch='Y';
while(ch=='Y')
{
printf("\nEnter new value for Y ");
scanf("%c",&ch);
getchar(); //takes care of '\n'
if(ch=='Y' || ch=='y')
// do some work
printf("Y was selected\n");
}
printf("exiting main");
return 0;
}
该代码现在可以正常工作。 以下是命令窗口中的代码段。
Enter new value for Y Y
Y was selected
Enter new value for Y Y
Y was selected
Enter new value for Y _
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.