这两天打代码发现过两起略过“%c”的scanf语句的问题,经过查资料发现了部分原因。
主要原因是在前面的scanf输入之后,空格、回车会存入缓存区中,其他类型的数据不会去读取你在前面输入的空格和回车,但是char类型会去读取,因此这个scanf语句会有直接略过的效果。
如果需要验证一下,我们可以用ASCII码来验证。
看以下代码:
#include<stdio.h>
int main(){
int a;
char b;
scanf("%d",&a);
scanf("%c",&b);
printf("%d",b);
return 0;
}
这里输出的结果是10,对比ASCII码表后发现,10对应的是换行,由此可以看出,在输入a之后,回车被后面的char给读取了。