2017-02-11 15 views
6

テキストファイルから数値を読み取って配列に格納しようとしています。 配列にある数字を読み取ろうとすると、出力がわずかにオフになります。 これは私のコードです:配列が正しく出力されない値

struct point{ 
    double x[7]; 
    double y[7]; 
}point; 

int main() 
{ 
    FILE *fp; 
    fp = fopen("data_2.txt", "r"); 
    struct point points; 
    int len = 8; 
    int i = 0; 
    int j = 0; 
    int k = 0; 
    double a = 0; 
    double b = 0; 
    double c = 0; 
    double total = 0; 
    int left=0; 
    int right=0; 
    int line = 0; 
    for (i=0;i<len;i++) 
    { 
     fscanf(fp, "%lf %lf", &points.x[i],&points.y[i]); 
    } 
    for(i = 0; i < len;i++) 
     printf("looking at point %.2f %.2f\n",points.x[i],points.y[i]); 

    return(0); 
} 

私が使用してテストファイルは、次の桁

2.3 7.5 
    7.6 7.1 
    8.5 3.0 
    5.9 0.7 
    1.0 2.0 
    5.1 5.8 
    4.0 4.5 
    4.3 3.4 

私が手出力がこれです含まれています

looking at point 2.30 4.30 
looking at point 7.60 7.10 
looking at point 8.50 3.00 
looking at point 5.90 0.70 
looking at point 1.00 2.00 
looking at point 5.10 5.80 
looking at point 4.00 4.50 
looking at point 4.30 3.40 

それは私がやっていることは何です違う?

+0

これは奇妙です。関数で関数の使用が完了したら、ファイルを閉じてみてください。 – Shravan40

+3

配列インデックスがオーバーフローしています。構造体ポイント内の 'x、y'配列は7つの数値しか保持できませんが、8に書き込もうとしています。配列サイズを拡張すると修正されます。 –

+0

[正しいC書式設定](// prohackr112.tk/pcf)を調べてください。 –

答えて

7

問題は構造体が8個の数値を格納するのに十分ではなく、undefined behaviorを呼び出すことです。あなたはdouble x[7]ですが、あなたは8にループしています。

なぜ特定の動作が起こっているのですか?OS Xで再現できる理由はわかりません。しかし、それはあなたのために未定義の動作です。これは、あなたが正しくデータを読み込み、表示するのに役立ちます

struct point{ 
    double x[8]; 
    double y[8]; 
}point; 

関連する問題