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

Des1gnWizard

目前,我正在自学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然后再决定是否读入“值”?我对它何时“返回其左操作数”感到非常困惑。

霍尔特

请记住,您的代码等效于:

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::cinto读取一个整数之后value>>操作符返回std::cin如果std::cin读取后处于良好状态value,则测试通过,否则它将失败。


一些额外的细节:

当你这样做std::cin >> value,你基本上调用istream::operator>>(int&),并且有一个测试里面那个方法:如果测试通过,那么的内部状态std::cin被设定为ios_base::goodbit,如果失败,内部状态被设定为在错误标志的(eofbitfailbitbadbit) 。

取决于exception maskfor std::cin,如果内部测试失败,则可能引发异常

从您的报价:

当我们使用istream作为条件时,其作用是测试流的状态。

这基本上意味着:

if (std::cin) { }

等价于:

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用std :: cin输入停止while循环

来自分类Dev

std::cin 导致无限循环

来自分类Dev

std :: cin >> std :: string如何实现?

来自分类Dev

来自无效输入的std :: cin无限循环

来自分类Dev

std :: cin无限循环输入错误

来自分类Dev

使用时如何重设std :: cin?

来自分类Dev

使用时如何重设std :: cin?

来自分类Dev

使用 std::cin.getline() 后如何保留 std::cin 的缓冲区

来自分类Dev

我的cin在while循环中被忽略

来自分类Dev

即使我调用ignore()和clear(),std :: cin也会循环

来自分类Dev

std :: cin跳过空格

来自分类Dev

if (cin) { while(cin)... 是如何工作的?

来自分类Dev

如何知道std :: cin是否来自重定向?

来自分类Dev

scanf(),std :: cin在多线程环境中的行为如何?

来自分类Dev

如何将“虚拟”值替换为std :: cin?

来自分类Dev

scanf / cin卡在循环中

来自分类Dev

std :: cin.fail()问题

来自分类Dev

我应该如何使用c ++处理“ std :: cerr”和“ std :: cin.fail()”?

来自分类Dev

cin在while循环中无法正常工作(C ++)

来自分类Dev

cin在while循环中无法正常工作(C ++)

来自分类Dev

使用cin在while循环中进行条件

来自分类Dev

std :: cout << std :: cin有什么作用?

来自分类Dev

while( cin >> value ) 在我输入一个字符时打破循环

来自分类Dev

cin >>整数和while循环

来自分类Dev

(C ++)不会在std :: cin上停止并进入无限循环吗?

来自分类Dev

(C ++)不会在std :: cin上停止并进入无限循环吗?

来自分类Dev

我可以循环直到 `std::cin` 在输入缓冲区中看到 `\n` 字符吗?

来自分类Dev

istream std :: cin如何修改自定义istream缓冲区?

来自分类Dev

Cin 在 for 循环中使用后被跳过

Related 相关文章

热门标签

归档