【问题标题】:C Program fscanf skips linesC 程序 fscanf 跳过行
【发布时间】:2016-01-31 11:28:47
【问题描述】:

这个程序需要一个文件,并且应该将文件内容传输到一个结构中

文件内容为:

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

【问题讨论】:

  • MAX_BOXES 未声明

标签: c file-io struct scanf


【解决方案1】:

出现问题是因为您调用了两次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++;
}

【讨论】:

  • 哦......哇......谢谢,我以为它只是将 fscanf 与数字进行比较,而不是实际执行命令。
  • 请参阅manual 了解更多信息以及this 问题。
  • @lodam 每次编写函数调用时,它都会执行该函数。它在 while() 内部的行为没有什么不同。
猜你喜欢
  • 2014-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 2014-12-19
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多