stdin
1.一个进程只有一个stdin,所有的输入共用这个stdin。
2.如果stdin中的数据较少,不符合目前规则(规则见后续)所需的,那么程序会阻塞等待输入。
3.已经读走的数据会从stdin消失。
4.在键盘上敲击的每个字符,都会在转换后放在stdin里。
5.敲击回车的时候,stdin中的数据将会提交给程序处理。
stdout
输出有个缓存区,当这个缓存足够大的时候就会输出(缓存有界)。
规则
%d:先处理掉所有不可见字符(回车、空格等),遇到数字或者负号开始转换,遇到第一个非数字字符停止转换,返回转换后的结果。
如果在需要数字字符的时候遇到了非数字字符,则转换失败。
%f:%f的基本规则同%d,只是数字录入的时候,第一次碰见‘.’的时候不会终止读取。
%c:存在读取失败,目前stdin中的第一个字符是什么就拿什么。
%s:先处理所有不可见的字符,然后拿到空格为止
例如:连续两个%s的情况。如果第一个字符是回车或者空格,则第二个字符吃这个回车或空格
总结
总而言之,这个输入缓冲规则就像是一群人(%d,%f,%s,%c)在排队打饭,锅里如果还有饭,这些人就拿走。锅里没饭就等待。%d和%f会挑食。