为什么这个循环与scanf总是退出?

时间:2017-12-05 16:23:51

标签: c

#include <stdio.h>

int main(){

  char quit = 'n';

  do{
    printf("Quit? (Y/N)");
    scanf("%c", &quit);
  }while(quit=='n' || quit=='N');
}

为什么输入任何内容后我的程序都会退出?

2 个答案:

答案 0 :(得分:7)

%c格式说明符接受任何字符,包括换行符。因此,如果按N,则scanf首先读取该字符,但按ENTER键的换行符仍在输入缓冲区中。在下一个循环迭代中,读取换行符。因为换行符既不是n也不是N,因此循环退出。

您需要在格式字符串的开头添加空格。这将吸收任何领先的空白,包括换行符。

scanf(" %c", &quit);

答案 1 :(得分:1)

只需将您的代码更改为:

#include <stdio.h>

int main(){

  char quit = 'n';

  do{
    printf("Quit? (Y/N)");
    scanf(" %c", &quit);
  }while(quit=='n' || quit=='N');
}

有关详细信息,请阅读此link