gpt4 book ai didi

c++ - 在什么情况下 fprintf() 不会写入输出文件

转载 作者:行者123 更新时间:2023-11-28 08:02:24 24 4
gpt4 key购买 nike

这是我之前发布的一个更大问题的子问题。以下是我尝试使用的 C++ 包中的代码片段。目的是将 float 组 prob_estimates 中的值写入输出文件。对于一些看似随机的行,只写入了数组的部分值。什么时候可以发生?我应该如何调试它?

    int j;
predict_label = predict_probability(model_,x,prob_estimates);
fprintf(output,"%g",predict_label);
for(j=0;j<model_->nr_class;j++) {
fprintf(output," %g",prob_estimates[j]);
fflush(output);
}
fprintf(output,"\n");

我还想指出,这似乎只有在输入规模相当大时才会发生。这是一个更大循环的一部分,它在输入文件的每一行(大约 200,000 行)中运行。 prob_estimates 数组每行有 500 个值。对于输出文件中的一些 20 多行,输出文件写入少于 500 个值。我在一个子集(有 20,000 行)上运行了几次,一切似乎都很好。

更新:我尝试在每次尝试写入后检查 fprintf 的返回值,结果发现它在尝试写入输出时对很多行返回 -1。

fprintf encountered error at 19th value of line 2109359. Returned -1
fprintf encountered error at 373th value of line 2109359. Returned -1
fprintf encountered error at 229th value of line 2109360. Returned -1
fprintf encountered error at 87th value of line 2109361. Returned -1
fprintf encountered error at 439th value of line 2109361. Returned -1

这是我将上面的代码修改如下:

 for(j=0;j<model_->nr_class;j++) {
int e = fprintf(output," %g",prob_estimates[j]);
if (e < 0) {
printf("fprintf encountered error at %dth value of line %d. Returned %d",j ,count ,e); }
}

这里的count是一个统计行数的变量。它在外循环的顶部递增(此处未显示)。我该怎么做才能弄清楚 fprintf 返回 -1 的原因?

最佳答案

您可以做的几件事:

  1. 同时将所有内容打印到控制台,以查看问题是在文件输出中还是在其他地方

  2. 打印 model_->nr_class 以确保值的数量符合您的预期

  3. 仅在关闭后检查输出文件。虽然你fflush输出,但可能是其他地方更新了文件,没有fflush。 fclose 会。我建议不要每行刷新文件,而是在函数开头以追加模式打开它,然后在最后关闭它。

希望对你有帮助

关于c++ - 在什么情况下 fprintf() 不会写入输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11086314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com