Fortran Coder

标题: 混合编程中fortran调用C输出文件的问题? [打印本页]

作者: KIM在路上!!!    时间: 2016-1-6 16:54
标题: 混合编程中fortran调用C输出文件的问题?
2016年第一帖,首先祝福各位大神不论是工作还是读书,都能在新的一年收获满满,开心顺遂!当然也要对去年近一年的时间各位大神对我的帮助表示感谢,有你们的帮助,真的让我这个初学者受益匪浅!
这个帖子是关于在fortran调用C里面的一个统计输出函数时的问题,具体见一下代码:
fortran的部分
[Fortran] 纯文本查看 复制代码

         IF(SFLAG%IRECRD.GE.1000) THEN
            CALL STATIS(c_loc(SFLAG))
            TMPTM0 = SECNDS(0.0)
            CALL FRMEM(c_loc(FLAG),c_loc(SFLAG))
            WRITE (*,*) 'frmem has done!'
            TMPTM = SECNDS(0.0)
            DELTM = DELTM + (TMPTM - TMPTM0)
         END IF

C的部分
[C] 纯文本查看 复制代码

void statis(struct ssflag *SFLAG)
{   
        char str[80];
        void output(struct incrmnt *pst, FILE *out);
        FILE *out;
        sprintf(str, "output\\statis%d.plt", SFLAG->nstep);
        out=fopen(str,"w");
        output(phead,out);
        fclose(out);
        return;
}

void output(struct incrmnt *pst, FILE *out)
{
        static int i;
        if(pst!=NULL)
        {
                fprintf(out,"%10d%14.2f%10d%10d\n",i++,pst->y[0],pst->js,pst->gross);
                output(pst->lchild,out);
                output(pst->rchild,out);
        }
        return;
}

大神,现在的情况是fortran可以调用C的函数进行输出,但是输出的结果和设想的不一样。fortran里面第一句   IF(SFLAG%IRECRD.GE.1000) THEN   里面这个1000是一个限制数,只要SFLAG%IRECRD大于这个数字,就会进行节点输出统计,也就是 CALL STATIS(c_loc(SFLAG))函数,节点统计的结果会打印在output文件夹的statis文件中,这个文件是可以输出的,但是输出的结果不对,我希望得到的结果是限制数为多少,文件里面就有多少行内容,比如之前的程序当这个限制数为10000时候,不论输出多少个statis文件,每个文件里面都有一万行,

但是现在得到的输出结果是,每一个文件里面只出现一行,

请问这是什么原因导致的?是我的语句写错了吗?



作者: fcode    时间: 2016-1-6 19:32
你循环了多次,每次都打开文件写入关闭。当第二次打开文件时,写入就会覆盖第一次的内容。

请把 fopen 放到循环外面




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2