2015-10-30 6 views
0

Эта программа берет файл и предполагается передавать файлы содержимого на структуруC Программа fscanf пропускает строки

Содержимое этого файла:

11.0, 11.0, 11.0, 14.0 
22.4, 22.4, 22.4, 28.9 
12.7, 13.8, 14.6, 14.5 
23.5, 13.5, 42.5, 21.8 
18.0, 16.0, 21.0, 42.9 
21.0, 21.0, 21.0, 100.0 

Выход файла:

22.4, 22.4, 22.4, 28.9 
23.5, 13.5, 42.5, 21.8 
21.0, 21.0, 21.0, 100.0 

Он пропускает каждую другую строку из содержимого файла, и я не уверен, как исправить эту проблему.

#include <stdio.h> 

#define MAX_ITEMS 100 

struct item { 
    double item1; 
    double item2; 
    double item3; 
    double item4; 
}; 

int main(void) 
{ 
    struct item myItems[MAX_ITEMS]; 
    int i = 0; 

    FILE *input; 
    input = fopen("items.txt", "r"); 

    if(input == NULL) { 
     printf("Error opening file\n"); 
     return 1; 
    } 

    while(fscanf(input, " %lf,%lf,%lf,%lf", &myItems[i].item1,&myItems[i].item2, 
      &myItems[i].item3, &myItems[i].item4) == 4) 
    { 
     fscanf(input, " %lf,%lf,%lf,%lf", &myItems[i].item1,&myItems[i].item2,  
      &myItems[i].item3, &myItems[i].item4); 
     printf("%lf %lf %lf %lf\n", myItems[i].item1, myItems[i].item2,  
      myItems[i].item3, myItems[i].item4); 
     i++; 
    } 

    fclose(input); 
    return 0; 
} 
+1

MAX_BOXES не объявлен – HDJEMAI

ответ

5

Проблема происходит потому, что вы называете fscanf дважды, и только распечатать результаты последнего. Вы вместо этого вы сделать это

while(fscanf(input, " %lf,%lf,%lf,%lf", &myItems[i].item1,&myItems[i].item2, 
      &myItems[i].item3, &myItems[i].item4) == 4) { 
    printf("%lf %lf %lf %lf\n", myItems[i].item1, myItems[i].item2,  
      myItems[i].item3, myItems[i].item4); 
    i++; 
} 
+0

о ... ничего себе .. Спасибо, я думал, что это просто сравнение fscanf с номером вместо фактического выполнения команды. – lodam

+0

Дополнительную информацию см. В [manual] (http://man7.org/linux/man-pages/man3/scanf.3.html), а также [this] (http://stackoverflow.com/questions/3351809/read-file-using-fscanf-in-c). – Linus

+1

@lodam Каждый раз, когда вы пишете вызов функции, он выполняет эту функцию. Он не ведет себя иначе внутри 'while()'. – Barmar

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