1
在我的下面的代碼中,我計算了單詞,行數,然後計算文本文件的大小。第一次使用seekg
工作正常後,第一個while
循環但第二個while
循環後,它不工作。它給出的值如輸出中所示。seekg第二次調用不起作用
#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
+1不同之處在於第一個循環只設置'eofbit',而第二個循環設置'eofbit'和'failbit'。 'seekg()'自動清除'eofbit',但如果設置了其他標誌則失敗。 – jrok
@CaptainObvlious先生,你能告訴你說的是哪個「最後輸入操作」嗎?另外,請告訴你如何知道失敗位是否設置? – Subbu
@CodeJack對'getline(txtFile,s)'的調用和我知道,因爲標準告訴我這樣 –