2017-03-27 15 views
0

私は、入力ファイルの行数を数えようとしている次のコードを持っていますが、それを実装するいくつかの方法を試しましたが、運はありません。テキストファイルの行数をカウントするのに最適な条件は何ですか?

int checkData(string File) 
{ 
string temp; 
int linecount = 0; 
ifstream input(File); 
input.open(File); 

while() 
    { 
     getline(input,temp); 
     linecount++; 
     temp.clear(); 
    } 
return linecount; 

}

はこれまでのところ、私が試した:

while(!input.eof()) 
    { 
    ... 
    } 

while(getline(input,temp).good()) 
    { 
    ... 
    } 

最初のdoesntがループを破る、と私はなぜ非常にわからないんだけど。 (私はかなり確信しています)getlineにはストリームバッファが組み込まれているので、ラインを引っ張ってそれを取り戻すたびにネットラインを自動的に読み取るべきですが、サイコロはありません。 2番目の場合、ループはまったく実行されません。これはまだ私には意味がありません(ファイルの最初の行は適切な入力ではないと言われています)。私が使用している テストファイルは次のとおりです。

this is a test  this  Cake 
this is a test  this  Cake 
this is a test  this  Cake 
this is a test  this  Cake 

正しく実行するときにラインカウントが4として返却しなければなりません。これを実行する前に、ファイルが正しく開かれていることを確認しました。

output

+3

最初はよく知られている問題です。 '.good()'を2番目から削除すると解決します。 – Incomputable

+0

これを実行しても、.good()フラグを削除してもwhileループは実行されません。 –

+1

@GrahamWilsonこれをもう一度チェックする必要があります。良い()を削除すると、問題が解決するはずです(原理的にだけでなく、コードをコピーしてコンパイルしました)。ちなみに、temp.clear()は必要ありません。 – jwimberley

答えて

2
int number_of_lines = 0; 
string line; 
ifstream myfile("textexample.txt"); 
while (std::getline(myfile, line)) 
    ++number_of_lines; 

それがお役に立てば幸いです。

関連する問題