2017-12-11 5 views
0

私は、次のデータセットがあります。なぜこのコードはデータセットの他のすべての座標のみを返しますか?

0 1 
0 3 
1 1 
2 3 
<empty line> 

私の目標は、2つの整数のx、およびyにこれらの点を読むことです。わかりやすく、私はファイルの最後の空白行を読みたくないので、それを避けるために次のコードを書いた。

#include <stdio.h> 
#include <math.h> 

int main() { 
    FILE *input; 
    int x, y; 
    const float r = 2; 

    input = fopen("coords.dat", "r"); 

    for (;;) { 
    int nread = fscanf(input, "%i %i\n", &x, &y); 
    if (!(nread >= 1)) break; 
    fscanf(input, "%i %i\n", &x, &y); 
    printf("%i %i\n", x, y); 

    } 

    fclose(input); 

} 

本質的に、行が空白の場合、私はループから抜け出す。 .datファイルの最後に空白行があることを知っています。しかし、私は次の出力を得ます:

0 3 
2 3 

明らかに、このコードは1行おきにスキップしています。なぜこうなった?

+0

フォーマットの末尾にある '\ n 'は悪い考えです。 ['scanf()' - フォーマット文字列内の末尾の空白を参照](https://stackoverflow.com/questions/15740024/) –

答えて

3

fscanfを2回実行していますが、最後に印刷するだけです。 forループから2番目のfscanfを削除する必要があります

関連する問題