c - 读取数据文件中的特定列

问题描述 投票:0回答:2

所以我创建了一个像这样的数据文件:

for(size_t n = ...;...;...){
    //do some stuff
    double mean_value = ...
    double min_value = ...
    double max_value = ...

    FILE *fp = fopen(OUTPUT_FILE,"a+");
    fprintf(fp,"%d %lf %lf %lf\n",n,mean_value, min_value, max_value);
    fclose(fp);
}

现在我想阅读我写的

mean_value
...

FILE *fp = fopen(OUTPUT_FILE,"a+");
double *means = malloc(...);
for(size_t i = 0; ...; ...){
    fscanf(fp,"%*d %lf %*lf %*lf\n", &means[i]);
}
//more stuff
fprintf(fp,...);
fclose(fp);

海湾合作委员会对此抱怨:

警告:以 gnu_scanf 格式 [-Wformat=] 一起使用赋值抑制和长度修饰符

fscanf(fp,"%*d %lf %*lf %*lf ", &表示[i]);

         ^

我不确定它想告诉我什么。

c file io scanf
2个回答
22
投票

格式字符串中的长度说明符(即

l
中的
lf
)旨在指示接收参数的大小(如果已分配),而
f
则说明输入应是什么样子。这意味着指定被抑制字段的长度是没有意义的,编译器只是试图确保您没有错误地输入
*
而不是
%
。只需从抑制字段中删除
l
即可。


0
投票

所以这个

fscanf(fp,"%*d %lf %*lf %*lf\n", &means[i]);

  • 读取小数丢弃它
  • 读取浮点数分配给长浮点给定指针
  • 读取浮动掉落(由于我们不使用它,所以无法告诉支架尺寸)
  • 读取浮动掉落(由于我们不使用它,所以无法告诉支架尺寸)

这就能完成工作(没有无用的尺寸精度)

fscanf(fp,"%*d %lf %*f %*f\n", &means[i]);
© www.soinside.com 2019 - 2024. All rights reserved.