简单的while循环

时间:2014-12-28 09:40:03

标签: c loops

我的代码:

#include <stdio.h>
int main(void){
char input;
  while(1){
      printf("Repeat? [Y/N] ");
      scanf("%c", &input);
      if(input=='N' || input=='n'){
          break;
      }
  }
  return 0;
}

预期产出:

Repeat? [Y/N] y

Repeat? [Y/N] y

Repeat? [Y/N] n  //Program terminated

输出:

Repeat? [Y/N] Repeat? [Y/N] y

Repeat? [Y/N] Repeat? [Y/N] y

Repeat? [Y/N] Repeat? [Y/N] n //Program terminated

3 个答案:

答案 0 :(得分:4)

scanf正在读取输入缓冲区中遗留的\n个字符(按 Enter 键)。只需将您的scanf替换为

即可
scanf(" %c", &input);  
//     ^A space before %c can skip any number of white-spaces

答案 1 :(得分:1)

更改

scanf("%c", &input);

scanf(" %c", &input); //Note the space before %c

当程序提示您输入字符时,输入字符并按 Enter 键(\n)。scanf读取您拥有的字符在输入流(\n)中输入并保留换行符(stdin)。因此,下次调用scanf时,它会看到\n中存在的stdin,因为它也是一个字符,scanf会消耗它,因此,不等待输入。

%c之前的空格指示scanf在读取字符之前跳过所有空格,如换行符和空格。

答案 2 :(得分:1)

在您使用y / n后按Enter时,您还会使用Enter个字符。出于这个原因,你得到Repeat? [Y/N] Repeat? [Y/N]

如果您只需添加getchar();行:::

,那么您的代码就会很好
int main(void){
char input;
  while(1){
      printf("Repeat? [Y/N] ");
      scanf("%c", &input);
      if(input=='N' || input=='n'){
          break;
      }
      getchar(); // for taking enter
  }
  return 0;
}