scanf() 是带有缓冲区的。
键盘输入的东西并没有直接给scanf读取 而是在缓冲区进行暂时存放。
为scanf以回车键为信号,去缓冲区进行读取数据,只要数据的格式符合标准,那么就可以正确读取,否则就要等待继续输入/读取失败
通过查阅资料我们知道了,scanf函数是标准输入流(从键盘接收数据),接收的数据放入输入缓冲区中,其中就包括在键盘输入的空格、回车这类字符,
当你用%d接收时是不会影响的,但是用%c就会产生错误,这是因为在"%c"输入时,空格和转义字符均被视为有效字符会被%c接收。从而导致输出错误,无法AC
一开始你输入20个字符,然后按回车键查看结果,此时缓冲区里面有回车键,你再输入ACM,缓冲区内的是回车键ACM回车键,但因为读取三位,所以读取的是回车键AC,打印出来是 A C,而不是A C M.
你可以验证一下用scanf读取四个字符,但输入三个,就会发现打印出来是ACM了。
所以想要解决问题的话可以加个getchar();把缓冲区给清空。
#include<stdio.h>
int main()
{
char a[2];
int i;
char j, k, l;
printf("请输入字符\n");
for ( i = 0; i < 2; i++)
{
scanf("%c", &a[i]);
}
for (i = 0; i < 2; i++)
{
printf("%c", a[i]);
}
printf("\n");
getchar();
scanf("%c%c%c", &j, &k, &l);
printf("%c %c %c", j, k, l);
return 0;
}
这是因为使用scanf通过%c获取字符时,空格键,回车键都会当成字符读入。