stdin
标准输入
stdin是标准输入,一般指键盘输入缓冲区里的东西,采用perl语言实现。
基本介绍
stdin是标准输入 std即standard(标准),in即input(输入),合起来就是标准输入。
示例:一个最简单的小程序,它的功能是从键盘输入字符,然后将其送到控制台。采用perl语言实现,你可以这样写:
简单地说,是一个专用的文件句柄,在本例中它属于标准输入缓存(称为STDIN),通常是连接到键盘。每次我们将的值赋给变量时,即为将STDIN缓存中的首行取出,然后放入。当到达缓存最后一行时,就会取出while语句判断条件为假的(EOF)文件结束标识符。程序的其它部分很简单可以这样解释。现在我们已经将输入信息放入变量,接着我们就可以用print函数将其打印到屏幕。或者更准确地说,打印到通常连接显示器的标准输出缓存。标准输入和输出缓存都可以重定向,例如可重定向到保存程序结果的某个文件中,如果是在处理文本,那么通常可以认为这与键盘及显示器是等价的。
程序详情
你可能会认为这一程序已经是最短的了,但是通过使用perl的特殊变量,它还可以更短。
它还可以这样书写:
stdin流阻塞的分析
scanf函数为例,运行下述程序
我们定义了a,b,c三个变量来接受输入的内容,定义了变量ret来接收scanf函数的返回值
正确输入的话:
但是当输入内容与格式换字符串不匹配时,结果会令人大跌眼镜(仔细分析会对stdin流有更深入理解的哦):
格式化字符串不匹配,stdin流被阻塞,scanf函数不在读取后面的部分,直接将1返回,表示只将stdin流中的1读入到了变量a中。
执行到第二个scanf时,字符’b’还是与格式化字符串不匹配,stdin流仍然被阻塞,所以没有提示输入,scanf函数将0返回。
将代码作如下修改,可以有力的证明上述结论。
当把第二个scanf函数内的格式化字符串改为”%c%d%d”时,运行结果如下:
执行到第一个scanf函数时,由于输入’b’的原因scanf函数直接返回1,stdin流阻塞。
执行到第二个scanf函数时,字符’b’与格式化字符串”%c%d%d”中的%c匹配,stdin流终于疏通,在输入6,则将变量a,b,c分别赋值为98(‘b’的ASCII码)、2、6,scanf函数返回3。
在scanf函数使用fflush(stdin);,清空输入缓冲区
运行结果
stdin流在实际中经常由于一些不正确的使用发生阻塞,注意使用fflush(stdin);,可以解决很多问题哦!
其他信息
stdout(Standardoutput)标准输出
stdin(Standardinput)标准输入
stderr(Standarderror)标准错误
参考资料
最新修订时间:2023-08-10 17:01
目录
概述
基本介绍
参考资料