gpt4 book ai didi

c++ - fstream 作为 bool 和 fstream.good() 函数的行为

转载 作者:行者123 更新时间:2023-11-28 00:24:04 26 4
gpt4 key购买 nike

我最近使用 fstream 完成一项家庭作业,我想知道这两个东西是如何工作的。

#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char** argv) {

ifstream myFile;
myFile.open("fileone.txt");
int myInt = 0;

while (myFile.good()) { // What is the difference between myFile and myFile.good()?
if (!myFile.eof()){
myFile >> myInt;
cout << myInt << endl;
}
}

return 0;
}

这是我正在处理的实际代码的片段。在另一篇文章中,有人说如果我使用 while(myFile) ,它会自动转换为 bool。使用this和使用ifstream类的成员函数.good()有什么区别?我知道 .good() 在我到达文本文件末尾时会跳出 while 循环,但使用流名称的行为如何?

最佳答案

IOStream 类有 4 个函数用于评估流状态:good()bad()fail()eof()。除了 good() 之外,每个函数都检查底层流状态中的单个位并返回该位是否打开(是否有错误?)。 good() 特别检查 所有 位是否关闭(流是否有效?)。这些是它们的用途:

  • good():流没有遇到错误。
  • bad():流遇到影响流完整性的错误(即内存分配失败、无缓冲区等)
  • fail():通常是可恢复的错误(格式化/解析失败)。
  • eof():已到达文件结尾 (EOF) 字符。

执行 I/O 时,在处理输入时检查流中的错误是不可或缺的。新手通常不知道的是,唯一 旨在用于检查有效输入的函数是fail()。所有其他函数在其他情况下都有用,但不适用于调节输入。

此外,新手也没有意识到输入必须在检查错误之前执行。否则会允许未经检查的提取,从而允许循环主体访问不是从有效提取中生成的值。

Streams 有一个返回 !fail() 的 bool 运算符,这允许您在执行输入后以优雅的方式检查流,如下所示:

while (myFile >> myInt) {
// ...
}

这是执行输入的最佳方式。提取本身应该存在于条件上下文中,以便只有在提取成功时才会执行使用它的主体。

关于c++ - fstream 作为 bool 和 fstream.good() 函数的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25965137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com