欢迎访问服务百科信息网!
首页 >科技 >stdin
stdin

stdin

(键盘输入到缓冲区里的东西)
stdin是标准输入,一般指键盘输入到缓冲区里的东西。
stdin资料
  • 外文名:stdin
  • 含义:标准输入
  • 释义:键盘输入到缓冲区里的东西
  • 基本介绍

    stdin是标准输入 std即standard(标准),in即input(输入),合起来就是标准输入。一般就是指键盘输入到缓冲区里的东西

    示例:一个最简单的小程序,它的功能是从键盘输入字符,然后将其送到控制台。采用perl语言实现,你可以这样写:

    while($line=)

    print$line;

    简单地说,是一个专用的文件句柄,在本例中它属于标准输入缓存(称为STDIN),通常是连接到键盘。每次我们将的值赋给变量$line时,即为将STDIN缓存中的首行取出,然后放入$line。当到达缓存最后一行时,就会取出while语句判断条件为假的(EOF)文件结束标识符。程序的其它部分很简单的可以这样解释。现在我们已经将输入信息放入$line变量,接着我们就可以用print函数将其打印到屏幕。或者更准确地说,打印到通常连接显示器的标准输出缓存。标准输入和输出缓存都可以重定向,例如可重定向到保存程序结果的某个文件中,如果是在处理文本,那么通常可以认为这与键盘及显示器是等价的。

    程序详情

    你可能会认为这一程序已经是最短的了,但是通过使用perl的特殊变量,它还可以更短。

    它还可以这样书写:

    1

    2

    3

    4

    while()

    {

    print;

    }

    stdin流阻塞的分析

    以scanf函数为例,运行下述程序

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    #include 

    int main (int argc, char * argv[])

    {

        int a = 0;

        int b = 0;

        int c = 0;

        int ret = 0;

        ret = scanf("%d %d %d",&a,&b,&c);

        printf("第一次读入数量:%d\n",ret);

        ret = scanf("%d %d %d",&a,&b,&c);

        printf("第二次读入数量:%d\n",ret);

        return 0;

    }

    我们定义了a,b,c三个变量来接受输入的内容,定义了变量ret来接收scanf函数的返回值。

    正确输入的话:

    stdin

    但是当输入内容与格式换字符串不匹配时,结果会令人大跌眼镜(仔细分析会对stdin流有更深入理解的哦):

    stdin

    执行到第一个scanf时,当输入字符’b’的时候与ret=scanf("%d%d%d",&a,&b,&c);中的格式化字符串不匹配,stdin流被阻塞,scanf函数不在读取后面的部分,直接将1返回,表示只将stdin流中的1读入到了变量a中。

    执行到第二个scanf时,字符’b’还是与格式化字符串不匹配,stdin流仍然被阻塞,所以没有提示输入,scanf函数将0返回。

    将代码作如下修改,可以有力地证明上述结论。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    #include 

    int main (int argc , char * argv[])

    {

        int a = 0;

        int b = 0;

        int c = 0;

        int ret = 0;

        ret = scanf("%d %d %d",&a,&b,&c);

        printf("第一次读入数量:%d\n",ret);

        ret = scanf("%c %d %d",&a,&b,&c);

        printf("第二次读入数量:%d\n",ret);

        return 0;

    }

    当把第二个scanf函数内的格式化字符串改为”%c%d%d”时,运行结果如下:

    stdin

    执行到第一个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);,清空输入缓冲区:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    #include

    int main (int argc ,char * argv[])

    {

        int a = 0;

        int b = 0;

        int c = 0;

        int ret = 0;

        ret = scanf("%d %d %d",&a,&b,&c);

        fflush(stdin);

        printf("第一次读入数量:%d\n",ret);

        ret = scanf("%d %d %d",&a,&b,&c);

        fflush(stdin);

        printf("第二次读入数量:%d\n",ret);

        return 0;

    }

    运行结果

    stdin

    stdin流在实际中经常由于一些不正确的使用发生阻塞,注意使用fflush(stdin);,可以解决很多问题哦!

    相关信息

    stdout(Standardoutput)标准输出

    stdin(Standardinput)标准输入

    stderr(Standarderror)标准错误

  • 上一篇百科:窗体控件
  • 下一篇百科:软件重用