case测试问题用数字标示和字母标示的区别

case后面的测试用数字标示和字母标示运行结果不同 字母标示怎么多循环了一轮

img

img

img

img

这个问题的原因是输入 'X' 后并不会立即结束getchar函数,而是将字符 'X' 存储在缓冲区中等待下一次读取,然后再输入回车符 '\n' 触发上一次输入,紧接着程序再次进入循环,由于缓冲区中还剩下一个'\n' 字符,所以循环条件判断不为真,程序继续执行,此时printf语句又会输出一次。

解决该问题的方法是在读取字符之前先使用getchar函数读取无用字符,例如:

int main()
{
    char choice;
    while ((choice = getchar()) != 'D')
    {
        while (getchar() != '\n'); // 读取并丢弃缓冲区中的无用字符
        printf("A");
        fflush(stdout); // 强制刷新输出缓冲区
    }
    return 0;
}