首页 > 解决方案 > Do-while 循环 scanf 在读取单个字符时读取循环两次而不是一次

问题描述

我有这个代码:

char c;
do
{
    scanf("%c",&c);
    printf("coucou\n");
} while (c!='q');

这是我的结果:

输入:

M

输出:

coucou
coucou

为什么每次打印“coucou”两次?

标签: ccharscanf

解决方案


循环执行 2 次,因为scanf扫描 2 个字符,一个用于换行符M,另一个用于\n换行符。

您可以通过在循环中添加条件来轻松解决此问题:

do
{
  if(getchar() != '\n')  
    printf("coucou\n");
} while (c!='q'); 

推荐阅读