Good()和fail()的理解

问题描述 投票:0回答:1

输入:10 20 30输出:60

输入:10到20输出:10

因为它得到的东西不是数字。而且我无法理解good()fail()在这里的工作方式。

int sum(istringstream & text) noexcept {
    int sum = 0; 
    int current = 0; 
    while (text.good())
    {
        text >> current; 
        if (!text.fail())
        {
            sum += current;
        }
    }
    return sum;
}
c++ iostream
1个回答
1
投票

失败

您尝试将非数字的内容读为整数。这将触发您的字符串流中的故障位。故障位基本上可以防止您完全使用该流(请考虑将流“断开”)。故障位将保持打开状态,直到对象被销毁,或者直到您使用text.clear()手动将其删除为止。


std :: ios :: fail检查是否设置了故障位或故障位如果为流设置了故障位或错误位错误状态标志(或两者),则返回true。当输入操作期间发生错误时,将至少设置这些标志之一。

故障位通常由错误与操作本身的内部逻辑有关的操作来设置;在流上可能有进一步的操作。

也请查看此表enter image description here

如果查看“检查状态标志的功能”下的fail()列,则会看到fail()在2种情况下返回true:

  1. I / O操作中的逻辑错误
  2. I / O操作上的读/写错误(您的情况)

Source


关于good(),它检查当前没有标志(有关标志,请参见上表)。

如果未设置任何流的错误状态标志(ebit,failbit和badbit),则返回true。

© www.soinside.com 2019 - 2024. All rights reserved.