为什么带有scanf的循环总是退出?

3
#include <stdio.h>

int main(){

  char quit = 'n';

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

为什么我的程序在输入任何内容后就退出了?

2
你需要清除stdin缓冲区。在%c之前加上空格。像这样使用scanf(" %c", &quit); - Achal
2个回答

7
%c格式说明符接受任何字符,包括换行符。因此,如果您按下N,那么scanf会首先读取该字符,但是按下ENTER键后的换行符仍然在输入缓冲区中。在下一次循环迭代中,将读取换行符。由于换行符既不是n也不是N,因此循环退出。
您需要在格式字符串的开头添加一个空格。这样可以吸收任何前导空格,包括换行符。
scanf(" %c", &quit);

1
只需将您的代码更改为:

#include <stdio.h>

int main(){

  char quit = 'n';

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

如需更多信息,请阅读此链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接