前言:
在之前学习C语言时, 一直对键盘缓冲区留下些什么很有疑问, 在百度百科上找到许多关于键盘缓冲区的问题,逐一进行思索,
找到的一些经典问题如下, 一些个人见解在之后会列出,请先思考,然后对照解析,希望能加深读者对这部分内容的理解。
程序1
#include "stdio.h"
void main()
{
char a;
char b;
scanf("%d",&a);
scanf("%d",&b);
printf("%d %d",a,b);
}
键盘输入
97<回车>96<回车>
输出
97 96
问题1:调用第一个scanf输入时,键盘缓冲区所有的字符为97\n,遇到回车,所以缓冲区把97赋值给a。调用第二个scanf输入时,键盘缓冲区所有的字符为96\n,遇到回车,所以缓冲区把96赋值给b。以上我的分析对吗?
程序2
#include "stdio.h"
void main()
{
char a;
char b;
scanf("%c",&a);
scanf("%c",&b);
printf("%d %d",a,b);
}
键盘输入
9<回车>
输出
57 10
问题2:调用第一个scanf输入时,键盘缓冲区所有的字符为9\n,遇到回车,所以缓冲区把9赋值给a。调用第二个scanf输入时,键盘缓冲区所有的字符为\n,遇到回车,所以缓冲区把\n赋值给b。以上我的分析对吗?如果对,那程序1中调用第一个scanf时,又为什么不是把97赋值给a后,将\n赋值给b呢?为什么调用第二个scanf时还需要继续输入96<回车>来对b赋值?调用第一个scanf输入时留在缓冲区的\n去哪里了?无端消失了?
程序3
#include "stdio.h"
void main()
{
char a[100];
char b[100];
scanf("%s",a);
scanf("%s",b);
printf("%s %s",a,b);
}
键盘输入
abc<回车>def<回车>
输出
abc def