当前位置:  开发笔记 > 编程语言 > 正文

如何在while循环中评估"std :: cin >> value"?

如何解决《如何在while循环中评估"std::cin>>value"?》经验,为你挑选了1个好方法。

目前我正在自学C++ Primer 5th.这是我不确定的事情.(我在FAQ上找不到确切的相关问题).

考虑这个while循环:

while(std::cin>>value){...}  \\value here was defined as int. 

教科书上写道:

该表达式从标准输入中读取下一个数字,并将该数字存储在值中.输入运算符(第1.2节,第8页)返回其左操作数,在本例中为std :: cin.因此,这个条件测试std :: cin.当我们使用istream作为条件时,效果是测试流的状态.如果流是有效的 - 也就是说,如果流没有遇到错误 - 则测试成功.

我的问题是:首先std::cin读入输入value然后测试验证std::cin,或std::cin首先测试然后决定是否读入'值'?当它"返回它的左操作数"时,我很困惑.



1> Holt..:

请记住,您的代码相当于:

while (std::cin.operator>>(value)) { }

要么:

while (1) {
    std::cin >> value ;
    if (!std::cin) break ;
}

"代码"总是试图从读std::cinvalue前的测试std::cin.

我们来看看报价:

[...]输入运算符(第1.2节,第8页)返回其左操作数,在本例中为std :: cin.[...]

这只意味着std::cin.operator>>(value)回归std::cin.

因此,这个条件测试std :: cin.当我们使用istream作为条件时,效果是测试流的状态.如果流是有效的 - 也就是说,如果流没有遇到错误 - 则测试成功.

什么书文说,试图读取一个整数后std::cinvalue,在>>运营商的回报std::cin.如果std::cin读完后处于良好状态value,则测试通过,否则失败.


一些额外的细节:

当你这样做时std::cin >> value,你基本上调用了istream::operator>>(int&),是的,该方法中有一个测试:如果测试通过,则内部状态std::cin设置为ios_base::goodbit,如果失败,则内部状态设置为错误标志(eofbit,failbitbadbit)的on .

根据exception maskfor std::cin,如果内部测试失败,则可能抛出异常.

从你的报价:

当我们使用istream作为条件时,效果是测试流的状态.

这基本上意味着:

if (std::cin) { }

是等价于:

if (!std::cin.fail()) { }

std::cin.fail()检查failbitbadbit.这意味着while (std::cin >> value) { }不会测试eofbit标志,只有在输入无法转换为整数值时才会失败.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有