2017-02-11 49 views
6

Bir metin dosyasındaki sayıları okumayı deniyorum ve bir dizide saklamıyorum. Dizideki sayıları okumaya çalıştığımda, çıktı azalıyor. Bu benim kodudur: ben yapıyorum da neDizgi doğru yazdırılmıyor Değerler

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 

geçerli:

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); 
} 

kullandığım Testi dosyası alıyorum aşağıdaki basamak

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 

çıkışını içeren bu yanlış?

+0

Bu garip. Kullanım tamamlandığında, dosyayı kapatmayı deneyin. – Shravan40

+3

Dizi dizinlerinden taşma var. Struct noktasında x, y 'dizisi sadece 7 sayı tutabilir, ancak 8'e yazmaya çalışıyorsunuz. Dizi boyutunu genişletmek bunu düzeltecektir. –

+0

[Uygun C formatlama] 'na bakmalısınız (// prohackr112.tk/pcf). –

cevap

7

Yapı sizin yapınızın 8 sayı saklamak için yeterince büyük değil ve undefined behavior çağırıyor. double x[7] var, ancak 8'e döngü yapıyorsunuz.

Neden bu özel davranışı alıyorsunuz, ve burada OS X'te yeniden üretebiliyorum, emin değilim. Ama bu sizin için tanımlanmamış bir davranış. Böyle

3

güncelleme yapı:

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

Bu okumak ve doğru verileri görüntülemek yardımcı olacaktır. example-with-stdin