为什么这个do whlie会将do里面的打印两次啊
我明明只写一个printf语句
当你输入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。