以下代码仅将文件打印一次:

#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将所有数据写入我的书中是一个严重错误。)

关于c++ - 使用file.seekg()遇到困难(C++),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14881883/

10-13 22:50