为什么会把输出语句打印两次

为什么这个do whlie会将do里面的打印两次啊
我明明只写一个printf语句

img

当你输入h回车时,
先从输入流中读出h,不是y、n,继续循环,打印提示,
再从输入流中读出回车符,不是y、n,继续循环,打印提示,
等待下次用户输入

你可以在%c前面加一个空格,用来忽略前导空白符(包含回车)

#include <stdio.h>

int main(void)
{
    char alp;
    do
    {
        printf("你是否想借书(y/n)\n");
        scanf(" %c", &alp); // %c前面加一个空格,用来忽略空白符
    } while (alp != 'y' && alp != 'n');
    return 0;
}

因为你是%c输入,回车也会被读取。
你输入 :h回车(存放在输入缓冲区)
第一次你执行完(h被读取,缓冲区还有\n),第二次的时候,\n被读取,相当于你输入了\n。