2015-12-04 9 views
0

Моя программа должна читать некоторые сегменты для определения плоскости. 3 сегмента на линию. архив вход:Файл в C идентифицирует ненужную строку

3 4 25 -4 -30 2 6 7 9 10 3 4 
3 4 4 -4 -3 2 6 7 9 10 5 6 

и читается как координаты: (3, 4) (25, -4) (-30, 2) (6,7) (9,10) (3 , 4)

Сегмент будет пара координат: S01 - (3,4) (25, -4) и так далее

код:

typedef struct{ 
    int x1, x2; 
    int y1, y2; 
    int id;  
}Segment; 

int main(){ 

    FILE *file; 
    int i=0, j=0; 
    Segment *seg; 

    seg=(Segment*)malloc(500*sizeof(Segment)); 

    file = fopen("input.txt", "r"); 

    while(!feof(file)){ 

     for(i=0; i<3; i++){ 
       fscanf(file, "%d %d %d %d", &seg[j].x1, &seg[j].y1, &seg[j].x2, &seg[j].y2); 
       seg[j].id=i+1; 
       printf("%d %d %d %d - ID: %d\n", seg[j].x1, seg[j].y1, seg[j].x2, seg[j].y2, seg[j].id); 
       j++; 
     } 
    } 
    fclose(file); 

    return 0; 
} 

ожидаемый выход:

3 4 25 -4 - ID: 1 
-30 2 6 7 - ID: 2 
9 10 3 4 - ID: 3 
3 4 4 -4 - ID: 1 
-3 2 6 7 - ID: 2 
9 10 5 6 - ID: 3 

Выход он дает мне, я не знаю, почему:

3 4 25 -4 - ID: 1 
-30 2 6 7 - ID: 2 
9 10 3 4 - ID: 3 
3 4 4 -4 - ID: 1 
-3 2 6 7 - ID: 2 
9 10 5 6 - ID: 3 
0 0 0 0 - ID: 1 
0 0 0 0 - ID: 2 
0 0 0 0 - ID: 3 

Я знаю, что это должна быть какая-нелепая ошибка, но какие-либо идеи о том, что является причиной его ?! Заранее спасибо :)

ответ

5

Вы должны проверить возвращаемое значение fscanf(), которое должно быть 4. Кроме того, вы не используете feof() правильный путь «см why is while (!feof(file)) always wrong: используется для проверки последнего считывания функция (fread(), fscanf() ...) не на конец файла (см feof(3) and ferror(3))

Edit: Так что ваш код должен быть как:

while (fscanf(...) == 4) 
{ 
     // do things with data 
} 

// after reading loop, determine why it ended 
if (feof(f)) 
{ 
    // end of file reached 
} 
else if (ferror(f)) 
{ 
    // error while reading 
} 
else 
{ 
    // fscanf failed, syntax error ? 
} 
+0

@iharob, спасибо за ваш обзор, это очень ясно. – purplepsycho

 Смежные вопросы

  • Нет связанных вопросов^_^