在c ++中无法多次读取文件

asd*_*fjk 0 c++ file

在我的任务中,我有一个阅读文件的问题.请参阅以下代码段.

    std::string data;
    std::ifstream fileRead;

    fileRead.open("a.txt");

    while (fileRead >> data) 
    {
        long a = fileRead.tellg();
        fileRead.seekg (a+1, ios::beg);

        std::string check;
        //some code here

        while (fileRead >> check)
        {
            //some code here
        }
        fileRead.seekg (a+1, ios::beg);
    }
Run Code Online (Sandbox Code Playgroud)

我必须检查文件中有多少相同的单词.我的逻辑是,我读了一个字并将其保存在数据中.然后我继续使用fileRead.seekg(a + 1,ios :: beg)读取该单词之后; 然后我比较文件中的每个单词.

检查完整个文件后,我再次使用此行fileRead.seekg(a + 1,ios :: beg)将我的文件对象放到下一个单词中; 但这条线不起作用.我的意思是第一次while循环只工作一次.有人请帮帮我.

顺便说一下,我在文件操作方面是全新的.因此,在这种情况下,我的逻辑或概念可能不正确,请告诉我这样做的正确方法是什么?但我需要知道为什么第一次while循环在读完一个单词后结束?

Naw*_*waz 6

当您将文件读取while(fileRead >> data)为时,在退出循环之前,会为流对象设置失败标志.实际上,设置就是它退出循环的原因.你需要清除这个 失败的标志:

fileRead.clear(); //clear the failure flag
fileRead.seekg (0, ios::beg);
//now read
Run Code Online (Sandbox Code Playgroud)

  • 可能值得区分`fail`和`bad`状态标志.如果`fileRead.bad()`返回true,你可以考虑关闭并重新打开流,或者终止应用程序......如果我的理解是正确的,那么`badbit`意味着一个潜在的不可恢复的错误. (2认同)