在下面给出的代码中,如果我按下' y'一旦它会重新开始,但它不会要求下一个重复(或者按下' y')。有人可以帮助为什么这个代码在一个循环后被终止?
main()
{
char choice;
do
{
printf("Press y to continue the loop : ");
scanf("%c",&choice);
}while(choice=='y');
}
答案 0 :(得分:3)
你应该在scanf()调用之后读出换行符。否则,下次会进入选择状态,因此while循环就会出现。
#include<stdio.h>
int main()
{
char choice;
do
{
printf("Press y to continue the loop : ");
choice = getchar();
getchar();
}
while(choice=='y');
return 0;
}
答案 1 :(得分:3)
那将是因为stdin被缓冲了。因此,您可能会输入y
后跟\n
(换行符)的字符串。
所以第一次迭代采用y
,但下一次迭代不需要你的任何输入,因为\n
在stdin缓冲区中是下一个。但是你可以通过让scanf消耗尾随空格来轻松解决这个问题。
scanf("%c ",&choice);
注意:"%c "
但是,如果输入以y
结尾,则程序可能陷入无限循环。因此,您还应该检查scanf
的结果。 e.g。
if( scanf("%c ",&choice) <= 0 )
choice = 'n';
答案 2 :(得分:2)
在scanf格式字符串的第一个字符处,插入一个空格。这将在读取数据之前清除stdin中的所有空白字符。
#include <stdio.h>
int main (void)
{
char choice;
do
{
printf("Press y to continue the loop : ");
scanf(" %c",&choice); // note the space
}while(choice=='y');
return 0;
}