C++中while(std::cin >> value)的思考

来源:互联网 发布:女童皮短裙淘宝 编辑:程序博客网 时间:2024/06/11 04:45
例子:
#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 就是流结束的信号。
0 0