C 程序 fscanf 跳过行
C Program fscanf skips lines
这个程序需要一个文件,并且应该将文件内容传输到一个结构
文件内容为:
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;
}
问题的发生是因为你调用了两次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++;
}
这个程序需要一个文件,并且应该将文件内容传输到一个结构
文件内容为:
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;
}
问题的发生是因为你调用了两次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++;
}