我有一个 C 程序试图记录一种叫做“雪崩大小”的东西。记录的标准是如果程序生成的“delta_energy”小于等于零,那么我可以将雪崩大小增加“*avalanche_size = *avalanche_size + 1;” 如果 delta_energy 不小于零,那么它会继续运行循环而不增加雪崩大小。
所以我想做的是在雪崩大小增加时(不是其他情况)将增量能量写入一个名为 delta_energies_GSA 的文件,如下面的代码所示。
但我发现发生的是,如果我将 fprintf 语句放在 if{ } 中,其中雪崩大小肯定会增加,每次它进行一次迭代时,它都会覆盖文件中的所有条目。所以最后我得到的文件只包含其中一次迭代的增量能量。如果我将 fprintf statemenet 放在括号外,它会记录所有内容,但它也会在雪崩大小未增加且我不想要这些时为我提供增量能量。
我想过做一个条件,比如“如果雪崩大小大于之前的雪崩大小,那么 fprintf delta 能量”......但我不确定如何做到这一点,因为雪崩大小只是一个整数而不是一个向量。 .
任何帮助将非常感激!谢谢
for (k = 0; k < n_nodes; k++)
{
if (delta_energy <= 0.0)
{
stored_state[i] = new_state;
*avalanche_size = *avalanche_size + 1;
printf("\n\n For k = %d: ",k);
printf("\n\n This is the delta energy with GSA for %d avalanche size:%f", *avalanche_size, delta_energy);
fprintf(delta_energies_GSA,"\n %d\t %d\t %f \n",k, *avalanche_size, delta_energy);
}
我没有展示完整的代码,因为它是一个非常大的程序的一个非常大的函数。我在打开和关闭文件时也非常小心。在我声明变量后,该文件在函数的开头打开。我在函数结束之前关闭了文件。
这是打开文件的方式:
{
double d_energy, q_A_minus_1, one_over_q_A_minus_1, prob_term;
neighbor_inf *np;
extern int generate_new_state();
FILE *delta_energies_GSA;
delta_energies_GSA = fopen("delta_energies_GSA.dat", "w");
if (delta_energies_GSA == NULL)
{
printf("I couldn't open delta_energies_GSA.dat for writing.\n");
exit(0);
}
在声明我的变量之后,它在函数结束之前关闭:
fclose(delta_energies_GSA);
return(stored_state);
} /* end recover_stored_patterns_GSA() */