首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C程序覆盖if语句中的文件内容

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

Stack Overflow用户
提问于 2013-08-10 12:02:17
回答 1查看 779关注 0票数 0

我有一个C程序,它试图记录一个叫做“雪崩大小”的东西。记录这一点的标准是,如果程序生成的" delta_energy“小于零,那么我可以将雪崩大小增加"*avalanche_size = *avalanche_size +1”;如果delta_energy不小于零,则继续运行循环而不增加雪崩大小。

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

但我发现,如果我将fprintf语句放在if{ }中,雪崩大小肯定会增加,那么每次迭代时,它都会重写文件中的所有条目。最后,我得到了一个文件,它只包含了其中一个迭代的增量能量。如果我把fprintf状态集放在括号之外,它记录了所有的东西,但是它也给了我δ能量,当雪崩的大小没有增加时,我不想要这些。

我想做这样一个条件:“如果雪崩的大小比以前的雪崩大小大,那么就把三角洲能量计算出来”。但是我不知道怎么做,因为雪崩大小只是一个整数,而不是一个向量。

任何帮助都是非常感谢的!谢谢

代码语言:javascript
运行
复制
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);

        }

我没有显示完整的代码,因为它是非常大的程序的一个非常大的函数。在打开和关闭文件时,我也非常小心。在声明变量之后,文件就会在函数的开头打开。在函数结束之前关闭文件。

文件是这样打开的:

代码语言:javascript
运行
复制
{
    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);
}

在声明我的变量并在函数结束之前关闭它之后:

代码语言:javascript
运行
复制
    fclose(delta_energies_GSA);
return(stored_state);

}    /* end recover_stored_patterns_GSA() */
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-10 12:31:17

fprintf()完成了您想要做的事情,将一个字符串附加到文件中,如果fopen()在循环之外(在本例中使用"w+“与fopen,用于追加),并且不寻求0,那么在这里没有发现代码有什么问题。

编辑 My错误,不是"w+“,而是"a”作为附加(如果您不需要也读取文件)。

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

代码语言:javascript
运行
复制
#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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18161657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档