文件使用困难.请参见()(C++)

  • 本文关键字:C++ 文件 c++ file eof seekg
  • 更新时间 :
  • 英文 :


以下代码只打印一次文件:

#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, const char *argv[])
{
    ifstream infile;
    infile.open("in", ios::binary);
    char c;
    while (infile.get(c))
    {
        cout << c;
    }
    infile.seekg(0, ios::beg);
    infile.clear();
    while (infile.get(c))
    {
            cout << c;
    }
    infile.close(); 
    return 0;
}

我认为这与运行完文件后的eof标志有关,但我不知道如何修复它。

干杯。

您的代码有几个问题:

首先,在使用之前不检查infile.get()是否成功它的结果,永远。您正在使用infile.good()进行控制一个循环,infile.eof()控制另一个循环:infile.eof()在您知道输入失败之前是无效的,并且infile.good()从来都不是真正有用的。两个循环都使用while ( infile.get( c ) )即可。

其次,正如你所说,你永远不会重置导致你以完成第一个循环。一旦你遇到了文件(并且infile.get( c )已失败),您需要调用infile.clear()

最后,当然,你没有检查自己是否成功打开文件,以及seekg是否成功。你呢通常不必关闭输入文件;它将关闭当它超出范围时自动执行。(另一方面,应该关闭或刷新std::cout,并验证之后还是可以的。失败时返回0写下所有的数据是我书中的一个严重错误。)

最新更新