gpt4 book ai didi

C程序在if语句中覆盖文件内容

转载 作者:行者123 更新时间:2023-11-30 15:46:40 24 4
gpt4 key购买 nike

我有一个 C 程序正在尝试记录称为“雪崩大小”的内容。记录这一点的标准是,如果程序生成的“delta_energy”小于等于零,那么我可以将雪崩大小增加“*avalanche_size = *avalanche_size + 1;”如果 delta_energy 不小于等于 0,则继续运行循环而不增加雪崩大小。

所以我想要做的是将雪崩大小增加时的增量能量(不是其他情况)写入名为 delta_energies_GSA 的文件,如下面的代码所示。

但是我发现发生的情况是,如果我将 fprintf 语句放在 if{ } 内,其中雪崩大小肯定会增加,那么每次执行一次迭代时,它都会覆盖文件中的所有条目。所以最后我得到的文件只包含一次迭代的增量能量。如果我将 fprintf statemenet 放在括号之外,它会记录所有内容,但它也会为我提供当雪崩大小未增加且我不想要这些时的增量能量。

我考虑过做一个类似“如果雪崩大小大于前一个雪崩大小,则 fprintf 增量能量”这样的条件......但我不知道如何做到这一点,因为雪崩大小只是一个整数而不是一个 vector ..

任何帮助将不胜感激!谢谢

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() */

最佳答案

fprintf() 完全按照您想要的方式执行,附加一个字符串到文件,我没有看到您的代码有任何问题 if fopen() 位于 for 循环之外(在本例中,将“w+”与 fopen 一起使用,用于追加)并且不存在 seek 到 0 .

编辑我的错误,不是“w+”,而是“a”用于附加(如果您不需要也读取该文件)。

您必须调查的错误行为是“为什么 fprintf 替换整个文件”。尝试这个简单的测试。

#include <stdio.h>

int main(int argc, char **argv) {
FILE *f = fopen("test", "w");
if (f) {
int i;
for (i=0; i<100; i++) {
if (i % 3)
fprintf(f, "%d\n", i);
}
fclose(f);
}
return 0;
}

关于C程序在if语句中覆盖文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18161657/

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