2017-02-11 48 views
6

Próbuję odczytać numery z pliku tekstowego i zapisać go w tablicy. Kiedy próbuję odczytywać liczby znajdujące się w tablicy, wynik jest nieznaczny. To jest mój kod:Tablica nie drukuje poprawnych wartości

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

pliku testu używam zawiera następujące cyfry

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 

Wyjście otrzymuję to:

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 

Co to jest, że ja robię źle?

+0

To dziwne. Spróbuj zamknąć plik, gdy jego użycie zostanie zakończone. – Shravan40

+3

Masz nadmiar indeksów tablicy. Tablica 'x, y' w struct point może zawierać tylko 7 liczb, ale próbujesz napisać do 8. Rozszerzenie rozmiaru tablicy naprawi to. –

+0

Powinieneś zajrzeć do [właściwego formatowania C] (// prohackr112.tk/pcf). –

Odpowiedz

7

Problem polega na tym, że twoja struktura nie jest wystarczająco duża, aby przechowywać 8 liczb i wywołuje undefined behavior. Masz double x[7], ale masz pętlę do 8.

Dlaczego otrzymujesz to konkretne zachowanie i mogę je odtworzyć tutaj na OS X, nie jestem pewien. Ale to nieokreślone zachowanie dla ciebie.

3

Aktualizacja struct tak:

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

to pomoże Ci odczytać i wyświetlić dane poprawnie. example-with-stdin