【问题标题】:c - reading a specific column in data filec - 读取数据文件中的特定列
【发布时间】:2016-06-24 09:06:16
【问题描述】:

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

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_values...

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

gcc 对此抱怨:

警告:在 gnu_scanf 格式中同时使用赋值抑制和长度修饰符 [-Wformat=]

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

         ^

我不确定它在这里想告诉我什么。

【问题讨论】:

  • @EugeneSh。除非我输入错误,否则您应该看到一个 %lf,其他应该是 %*lf,因此被忽略。
  • 是的,对不起。误读

标签: c file io scanf


【解决方案1】:

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

【讨论】:

  • 每天学习新东西。 :)
  • 今天明白了这一点。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
相关资源
最近更新 更多