-2

我有一个名为 one.txt 的 .txt 文件。它包含以下三个序列。

1 -1 -1 1 1 1
1 1 1 -1 -1 -1
1 -1 1 -1 1 1

我正在使用嵌套的 for 循环来读取上述文件中可用的序列进行三个迭代,如下所示

int dd6[6];

ifstream f6;


for(int i=0;i<3;i++){

    f6.open("C:\\one.TXT");

        for(int i7=0;i7<3;i7++){

              for(int i8=0;i8<6;i8++){
                  f6>>dd6[i8];
                  cout<<dd6[i8]<<" ";
              } 
              cout<<"\n";   
        }
        f6.close();
        cout<<"\n";

}

如上述程序所示,我需要将 one.txt 中可用的 3 个序列读取 3 次,如下所示,

1 -1 -1 1 1 1
1 1 1 -1 -1 -1
1 -1 1 -1 1 1

………………………………………………………………………………

1 -1 -1 1 1 1
1 1 1 -1 -1 -1
1 -1 1 -1 1 1

…………………………………………………………………………………………………………

1 -1 -1 1 1 1
1 1 1 -1 -1 -1
1 -1 1 -1 1 1

但是,当我使用上述程序时,我总是得到如下输出,其中第二个和第三个三元组似乎只有最后一个序列 (1 1 -1 -1 1 1) 三次。

1 1 1 -1 -1 -1
1 -1 1 -1 1 1
1 1 -1 -1 1 1

.....................

1 1 -1 -1 1 1
1 1 -1 -1 1 1
1 1 -1 -1 1 1

.....................

1 1 -1 -1 1 1
1 1 -1 -1 1 1
1 1 -1 -1 1 1

我的代码中可能存在什么问题?任何帮助表示赞赏。

谢谢

4

1 回答 1

1

我不确定这是问题所在,但是您可以将 get 指针发送到文件的开头,而不是关闭和打开文件

f6.seekg(0, ios::beg);

编辑:已回答

这是正确的代码。当流到达文件末尾时,它会设置一个错误标志,从那时起读数是错误的。您必须在再次阅读之前清除流。我编写了一个版本的程序,每次都没有重新打开流,但即使你打开和关闭文件,它也能工作。

int dd6[6];

ifstream f6;
f6.open("C:\\one.TXT");

for(int i=0;i<3;i++){

    //f6.open("C:\\one.TXT");

        for(int i7=0;i7<3;i7++){
              for(int i8=0;i8<6;i8++){

                  f6>>dd6[i8];
                  cout<<dd6[i8]<<" ";
              } 
              cout<<"\n";   
        }
        f6.clear(); //clear the error flags!
        f6.seekg(0, ios::beg);
        cout<<"\n";

}
于 2012-10-25T13:28:26.103 回答