1

次のコードでは、単語数、行数をカウントしてから、テキスト ファイルのサイズを計算しています。の最初の使用はseekg、最初のwhileループの後では正常に機能しますが、2 番目のwhileループの後では機能しません。output に示されているように値が得られます。

#include <iostream>
#include <fstream>
using namespace std ;

int main(void)
{
    fstream  txtFile;
    txtFile.open("test.txt");

    if(txtFile.is_open())
    {
        printf("txt file is opened");
    }

    //number of words and lines in txt file
    int w=0 , l =0 ;
    int c , start , end;
    string s;

    while(1)
    {
        if(txtFile.peek() == -1)
            break;
        c = txtFile.get();
        if(c != txtFile.eof())
                    w++;
    }

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

    while(getline(txtFile,s))
    {
         l++ ;
    }
    printf("no of words : %d , no of  lines: %d\n",w,l);

    //calculate the size of both the files
    txtFile.seekg(0,ios::beg);
    start = txtFile.tellg();
    printf("%d\n",start);;
    txtFile.seekg(0, ios::end);
    end = txtFile.tellg();
    printf("%d\n",end);;

    return 0 ;
}


OUTPUT
txt file is opened
no of words : 128 , no of  lines: 50
-1
-1
4

1 に答える 1

6

最後の入力操作により、フェイル ビットがセットされます。このビットが設定されているときに呼び出すとtellg、それも失敗します。clear()に電話する前に電話する必要がありますtellg()

txtFile.clear(); // clear fail bits
txtFile.seekg(0,ios::beg);
于 2013-08-02T20:07:56.330 に答える