我正在尝试学习使用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。