zoukankan      html  css  js  c++  java
  • C++中while(std::cin >> value)的思考

    例子:
     
    #include  <iostream>
    int main()
    {
        int sum = 0, value = 0;
        while(std::cin >> value)
        {
            sum += value;
        }
        std::cout << "sum is " << sum << std::endl;
        return 0;
    }
     
    输入运算符( >> ):从左侧istream对象读入数据存入右侧对象中,并返回istream对象作为运算结果。因此,std:cin是while判断的依据。
    输入原理:
    1(运行VS2010检测)
    输入(cin)缓冲是行缓冲。当从键盘上输入一串字符,字符首先是存入缓冲区,cin对象会对缓冲区进行检测,当按回车后,cin就会检测输入缓冲区中是否有了可读的数据。如果有数据就会读入数据存入右侧对象,会自动忽略space空格符,当遇到与右侧对象类型不符的数据时会结束,退出while。
    输入:1 2 3 q "enter"
    输出:6
    在windows中,采用的是阻塞式检测,在回车之后会检测流结束标志 ,在VS中“ctrl+z”作为输入流结束的标志,所以在存入数据的时候,会自动忽略ctrl+z之后的数据。
    注:阻塞式检查方式指的是只有在回车键按下之后才对此前是否有 Ctrl+Z 组合键按下进行检查。
    输入:1 2 3 “ctrl+z”1 2 "enter"
    输出:6
    注:gcc在windows上运行的时候,"ctrl + d"为输入流结束标志。

    Unix/Linux系统下一般采用非阻塞式的检查 ,非阻塞式样指的是按下 Ctrl+D 之后立即响应的方式。如果在按 Ctrl+D 之前已经从键盘输入了字符,则 Ctrl+D的作用就相当于回车,即把这些字符送到输入缓冲区供读取使用,此时Ctrl+D不再起流结束符的作用。如果按 Ctrl+D 之前没有任何键盘输入,则 Ctrl+D 就是流结束的信号。
  • 相关阅读:
    第 28 章 CSS3 多列布局
    实例解读什么是Redis缓存穿透、缓存雪崩和缓存击穿
    深入浅出一致性Hash原理
    要想深入理解mysql索引?这16个点你必须要了解!
    为什么不要尝试用int来存手机号?
    mysql-覆盖索引
    聚集索引,非聚集索引,覆盖索引 原理
    mysql use index、ignore index、force index用法
    HashMap在JDK1.8版本尾插法实现解析
    redis slot 槽点
  • 原文地址:https://www.cnblogs.com/vczf/p/6823268.html
Copyright © 2011-2022 走看看