C程序fscanf跳过行

lod*_*dam 0 c file-io struct scanf

该程序接受一个文件,并且应该将文件内容传输到结构

该文件的内容是:

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   
Run Code Online (Sandbox Code Playgroud)

该文件的输出是:

22.4,  22.4, 22.4, 28.9
23.5,  13.5, 42.5, 21.8
21.0,  21.0, 21.0, 100.0
Run Code Online (Sandbox Code Playgroud)

它正在从文件的内容中跳过每隔一行,我不知道如何解决这个问题.

#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;
}
Run Code Online (Sandbox Code Playgroud)

Lin*_*nus 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++;
}
Run Code Online (Sandbox Code Playgroud)