这是一个小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”。输出如下所示:
如此处所示,编译器第二次没有停止输入。这背后的原因是什么?提前谢谢!
答案 0 :(得分:1)
只需在scanf中添加一个空格,如下所示:
scanf(" %c",&ch);
原因是你输入:Y\n
(带回车)
scanf只读取Y
!所以在下一个scanf \n
仍在缓冲区中并且已经读入了!
所以,如果你现在有一个空间,在你读新的东西之前就会有一个空格(看起来像这样:'\ n')!
答案 1 :(得分:0)
'\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 _