在C语言里,字符的输入都是通过调用函数来实现的:getchar( )、scanf( )
其中,getchar 函数只能处理单个字符的输入与输出,函数体本质上与scanf函数是一致的,都是阻塞式函数。
阻塞函数是指当这个函数不执行完,函数所在的线程就一直停止不动,直到获得函数结果。例如
int number;
scanf(“%d”,&number);//请用户输入一个数字
假设我们输入数字123,
执行的步骤是:
1.控制台一次输入:12334()
2.敲下回车,告诉计算机,输入结束(若不按回车需要用户不断输入)
此时,scanf()函数会做两件事情
一:
将我们输入的所有数据都存取到一个缓存中。从逻辑上来说,我们想传递的是一个3位数字:123,但是笨笨的计算机不这么认为,在缓存中它存取的是:1 、2、3、\n 四个字符,其中‘\n’代表我们最后敲下的回车即换行符
二:
因为我们是以%d的格式,希望计算机能以int 类型的格式存储到我们的变量number中,所以scanf()函数会依次从缓存中读取数据,首先是‘1’,是int类型的,符合我们的格式,然后继续读取‘2’,也是符合的…直到读取到最后的‘\n’,scanf()函数发现它不是我们想要的int类型,所以就扔在缓存里,并将前3个字符打包成我们想要的数据:123 ,最后scanf(&#x