C++ 为什么这段代码会导致无限循环? void foo(){ ifstream; stream.open(名称); if(stream.fail()){ cout>id>>r>>s; 而(!stream.eof()){ charf[3]; charw[3]; charj[3]; 流.getline(f,3); 流。getline(w,3); 流.getline(j,3); 流>>p; 流>>q; } stream.close(); }

C++ 为什么这段代码会导致无限循环? void foo(){ ifstream; stream.open(名称); if(stream.fail()){ cout>id>>r>>s; 而(!stream.eof()){ charf[3]; charw[3]; charj[3]; 流.getline(f,3); 流。getline(w,3); 流.getline(j,3); 流>>p; 流>>q; } stream.close(); },c++,file,C++,File,此代码用于读取文件的第一行并从中保存数据。然后,它将每3个字符保存到一个单独的字符数组中,该数组稍后将保存到尚未执行的对象上的成员变量中。但是,当我运行它时,流似乎没有读取任何内容,而是失败并导致无限loop、 我非常确定该文件包含有效数据。您的循环条件错误: void foo() { ifstream stream; stream.open(name); if(stream.fail()){ cout << "invalid";

此代码用于读取文件的第一行并从中保存数据。然后,它将每3个字符保存到一个单独的字符数组中,该数组稍后将保存到尚未执行的对象上的成员变量中。但是,当我运行它时,流似乎没有读取任何内容,而是失败并导致无限loop、 我非常确定该文件包含有效数据。

您的循环条件错误:

void foo() {

    ifstream stream;    
    stream.open(name);
    if(stream.fail()){
        cout << "invalid";
        return;
    }

    int p;
    int q;
    string id;
    int r;
    int s;

    stream >> id >> r >>s;

    while( !stream.eof() ) {

        char f[3];
        char w[3];
        char j[3];

        stream.getline(f,3);
        stream.getline(w,3);
        stream.getline(j,3);

        stream >> p;
        stream >> q;
    }

    stream.close();
}
应该是:

while( !stream.eof() ) {

特别是,当输入操作失败时,您的代码将无限循环,因为您从未达到EOF。

最后一个
}
是用于什么的?哦,它是函数的一部分,我编辑了它。为什么您将
>
getline
混合?您不应该盲目地将文件流读取到类型化变量中,因为这样您的程序将崩溃(或处于损坏状态)如果文件流的实际数据与您的读取方式不一致,@Dai的评论中提出的问题的一个常见结果是:我不完全确定为什么流在结束前会失败?@icemanharden您对流在结束前不会失败有多大信心?您可以尝试这个建议的解决方案,只是为了向John Zwinck证明它不起作用。:)这个解决方案可以防止无限循环,但我现在不得不承认输入仍然失败,无法使用。@icemanharden您试图将某些内容读入一个非整数的整数变量。在没有看到输入的情况下不可能说出什么。外卖:在任何IO事务之后测试流状态,以确保事务成功,并采取符合逻辑的任何措施。一般来说,不要在EOF上循环。IO可能会出现太多其他问题,如果您不注意这些问题,程序将失败。另外,总有这样一个人:。
while( stream ) {