执行while循环选择作为C中的char

时间:2012-08-17 04:42:03

标签: c

在下面给出的代码中,如果我按下' y'一旦它会重新开始,但它不会要求下一个重复(或者按下' y')。有人可以帮助为什么这个代码在一个循环后被终止?

 main()
{
 char choice;

 do
 {
  printf("Press y to continue the loop : ");
  scanf("%c",&choice);
 }while(choice=='y');

}

3 个答案:

答案 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 "

中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;
}