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 就是流结束的信号。

 

转载于:https://www.cnblogs.com/vczf/p/6823268.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值