1

たとえば、数字の行を含むテキストファイルがあります

 5  6  3 2 10  4 6 
18 49 40 9 17 40 0

そして、ファイルを読み込むと、ファイルの最後で止まりません。ループ読み込みの私のコードは次のとおりです-

while ((fscanf(spFile, "%d", &scores[i][j])) == 1 && spFile != EOF) {
        printf("%d ", scores[i][j]);

        if(j == 8) {
            i++;
            j = 0;
            printf("\n");
        } else {
            j++;
        }
        numOfStudents++;
    }

行の最大数は 50 です (したがって、50 の配列 (ポインターではなく配列としてこれを持たなければなりません)) で、行数をカウントする numOfStudents があります。

ありがとう!

4

3 に答える 3

2

fscanf() は 0 または EOF を返します。

「feof()」関数を使用することもできます。

ファイル ポインタ変数 spFile が EOF になることはありません。「EOF」は C ランタイムによって管理される状態であり、ファイル ポインター自体ではありません。

于 2012-10-06T21:05:03.857 に答える
0

ループの条件は次のようになります。

while (fscanf(spFile, "%d", &scores[i][j]) > 0){
   /* Do Stuff */
}

または、入力を解析できない場合を回避するには:

while (!feof(spFile) && fscanf(spFile, "%d", &scores[i][j]) > 0){
   /* Do Stuff */
}
于 2012-10-06T21:04:00.450 に答える
0

によって返されるバイト数fscanf()が より大きいかどうかを確認してみてください0:

while(fscanf(...) > 0) {
/* do something */
}

エラーチェックを使用すると、次のようになります。

while(1) {
  fscanf( .. );

  if(feof(fp)) {
    if(ferror(fp)) {
        /* stoped because an error check out errno */
    }

   break;
  }
于 2012-10-06T21:12:33.860 に答える