4

テキストファイルを読み込もうとしていますが、その前に、読み取る要素の数を知りたいと思います。したがって、テキストファイルの行数を数える必要があります。これまでのところ、私はこれを持っています:

int getLinecount (char *file) 
{
    int ch, count = 0;
    FILE *fp = fopen(file, "r");
    if(fp == NULL)
    {
        return -1;
    }
    while((ch = fgetc(fp)) != EOF)
    {
        if (ch == '\n'); 
        {
            count++;
        }
    }
    fclose(fp);
    return count;
}

これはかなりうまくいきました。テキストファイルについては何も変更していませんが、ファイルの行数は10,000行ですが、それでも130,000を出力します。私がメインで書いたのは:

linecount = getLinecount("...");

エラーがどこにあるのか本当に興味があります。また、行数を取得するためのより良いオプションはありますか?

4

7 に答える 7

10

ステートメントの後にセミコロンがあり;ます。if次に、ブロックは常に実行されます。

{
    count++;
}
于 2012-11-08T15:01:18.383 に答える
4

変化する

if (ch == '\n'); 

に:

if (ch == '\n')
于 2012-11-08T15:03:02.373 に答える
3

:の後の末尾のセミコロンはif削除します。末尾のセミコロンを使用すると、コードは次のようになります。

if (ch == '\n') {}
count++;

つまりcount、ループの反復ごとcharに (ファイル内のすべてで) 増分されます。

于 2012-11-08T15:01:25.807 に答える
1

後に削除する末尾のセミコロンがありますif

ファイルを読み取るには、次のコードを使用することをお勧めします。

while((fgets(blahblahblah)) != NULL) {
  counter++;
}
于 2012-11-08T15:02:54.713 に答える
1

;行から削除する必要があるセミコロン ( ) を除いて、すべて問題ありません。

if (ch == '\n')
于 2012-11-08T15:58:50.613 に答える
0

このファイルの作成と表示に使用している OS を考慮する必要がある場合があります。

PHPエコー改行からコピー:

  • '\n' は linux/unix の改行です
  • '\r' は従来の Mac の改行です [OS X は上記の UNIX を使用します \n]
  • '\r'+'\n' は Windows の改行です
于 2012-11-08T15:06:27.067 に答える
0

他の人が言及した問題とは別に、彼がなぜ自分のやり方で物事を行うのかを説明しているので、この;投稿で別の解決策を見つけることができます.

于 2012-11-08T15:04:49.953 に答える