输入缓冲区
所有从键盘输入的数据,,不管是字符还是数字,都是先存储在内存中的一个缓冲区里面,叫做键盘缓冲区,简称“输入缓冲区”或者“输入流”。
#include<stdio.h>
int main(void)
{
int a, b, c;
scanf("%d", &a);
printf("%d\n", a);
scanf("%d", &b);
printf("%d", b);
scanf("%d", &c);
printf("%d", c);
return 0;
}
从输出结果可以看出,不管是一个一个地输入:1(回车)2(回车)3(回车);还是三个数字一次性输入:1(空格)2(空格)3(空格),这两种方式结果都是一样的,原因就是从键盘输入的数据都会依次存入缓冲区,不管是数字还是字符都会被当成数据存进去。但是只有按下回车,scanf才会将数据存进缓冲区中,因此不管我们怎么输入,我们可以存一个取一个,也可以一次性全存入进去,然后一个个取。
%d和%c读取缓冲区的差别
对于%d,在缓冲区中,空格,回车,Tab键都只是分割符,
不会被scanf当成数据取用,%d遇到过他们就会跳过,取下一个数据。但是如果是%c,那么空格,回车,Tab键都会被当成是数据给scanf取用,
#include<stdio.h>
int main(void)
{
int a, b;
char c;
scanf("%d%c%d", &a, &c, &b);
printf("a = %d, b = %d,