2017-02-11 6 views
6

Ich versuche, Zahlen aus einer Textdatei zu lesen und sie in einem Array zu speichern. Wenn ich versuche, die im Array vorhandenen Zahlen zu lesen, ist die Ausgabe etwas aus. Dies ist mein Code:Array druckt nicht korrekt Werte

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

die Testdatei Ich benutze enthält folgende Ziffern

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 

Der Ausgang I erhalten, ist dies:

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 

Was ist das, was ich tue, falsch?

+0

Das ist seltsam. Versuchen Sie, die Datei zu schließen, sobald die Nutzung abgeschlossen ist. – Shravan40

+3

Sie haben einen Überlauf von Array-Indizes. Array 'x, y' im struct-Punkt kann nur 7 Zahlen enthalten, aber Sie versuchen, in 8 zu schreiben. Wenn Sie die Array-Größe erweitern, wird das Problem behoben. –

+0

Sie sollten in [richtige C-Formatierung] (// prohackr112.tk/pcf) schauen. –

Antwort

7

Das Problem ist, dass Ihre Struktur nicht groß genug ist, um 8 Zahlen zu speichern, und es ruft undefined behavior auf. Sie haben double x[7], aber Sie sind auf 8 Schleife.

Warum Sie dieses spezifische Verhalten erhalten, und ich kann es hier auf OS X reproduzieren, bin ich mir nicht sicher. Aber das ist ein undefiniertes Verhalten für dich.

3

Aktualisieren Sie Ihre Struktur wie folgt aus:

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

Dies hilft Ihnen, die Daten korrekt lesen und anzeigen. example-with-stdin

Verwandte Themen