所以我创建了一个像这样的数据文件:
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]);
^
我不确定它想告诉我什么。
格式字符串中的长度说明符(即
l
中的 lf
)旨在指示接收参数的大小(如果已分配),而 f
则说明输入应是什么样子。这意味着指定被抑制字段的长度是没有意义的,编译器只是试图确保您没有错误地输入 *
而不是 %
。只需从抑制字段中删除 l
即可。
所以这个
fscanf(fp,"%*d %lf %*lf %*lf\n", &means[i]);
说
这就能完成工作(没有无用的尺寸精度)
fscanf(fp,"%*d %lf %*f %*f\n", &means[i]);