std::cin无限读取的原理

转载来自:http://maochong.xin/2018/01/15/stdcin/

在C语言中,如果遇到需要读取不定数量的数据时,通常使用

     
     
1
2
3
     
     
while( scanf() != EOF){
//do something...
}

的方式来实现

而在C++中就简单了一些。

C++可以通过std::cin通过流^(1)读取数据,比如以下代码

     
     
1
2
3
4
     
     
int value,sum;
while(std::cin >> value){
sun += value;
}

这段代码是从流读取一个整数,保存在value中。输入运算符返回左侧运算对象^(2)。也就是说以上代码的循环条件也就是检测std::cin。

使用istream对象^(3)作为运算条件时,是在检测流的状态。如果流有效那么会继续输入,遇到EOF或者无效的输入时istream就会变为无效,运算条件为假,然后结束这个循环。

以上,也就解释了C++循环读取一个不定数量的数据的原理。

1.C++流是指信息从外部输入设备(如键盘和磁盘)向计算机内部(即内存)输入和从内存向外部输出设备(如显示器和磁盘)输出的过程,这种输入输出过程被形象地比喻为”流”。参考C++流的概念

2.输入运算符 >> 与输出运算符 << 接受一个istream作为左侧运算对象,接受一个对象作为右侧运算对象。从给定的istream接受或输出数据,接受的数据会存入给定对象中,输出运算符则是返回左侧运算对象作为其计算结果。

3.标准中定义的std::cin就是istream类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值