使用.clear()清除流状态时出现意外结果

时间:2016-04-17 13:26:36

标签: c++ iostream

我正在尝试学习使用c ++处理数据流的细节,当我尝试使用.clear()来重置流错误状态时,我发现了一些奇怪的行为。为了说明这一点,我想说我想使用ifstream读取.txt文件中的数据:

int main() {

    ifstream fileStream("data.txt");

    double testDouble;
    string testString;

    fileStream >> testDouble;

    fileStream.clear();

    fileStream >> testString;
    cout << testString << endl;

    return 0;

}

data.txt只包含一个字符,例如“B”。这意味着,正如预期的那样,当我尝试读入testDouble时,fileStream被设置为失败状态,因为data.txt的输入不是double。文档告诉我,当我调用fileStream.clear()时,将重置此失败状态,这应该允许我从fileStream读取导致初始失败的字符到testString并在终端中输出结果。实际上,这就是发生的事情,但只有当data.txt包含字母“g”,“h”,“j”,“k”,“l”,“m”,“o”,“q”,“r时“,”s“,”t“,”u“,”v“,”w“,”y“或”z“。所有其他字母都会产生一个空的testString而没有输出。如果我不首先将fileStream置于故障状态,我可以毫无问题地读取data.txt中的数据。我在OSX 10.11.3上使用Xcode 7.3。

0 个答案:

没有答案