KIM在路上!!! 发表于 2016-1-6 16:54:41

混合编程中fortran调用C输出文件的问题?

2016年第一帖,首先祝福各位大神不论是工作还是读书,都能在新的一年收获满满,开心顺遂!当然也要对去年近一年的时间各位大神对我的帮助表示感谢,有你们的帮助,真的让我这个初学者受益匪浅!:-)
这个帖子是关于在fortran调用C里面的一个统计输出函数时的问题,具体见一下代码:
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的部分
void statis(struct ssflag *SFLAG)
{   
      char str;
      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,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:12

你循环了多次,每次都打开文件写入关闭。当第二次打开文件时,写入就会覆盖第一次的内容。

请把 fopen 放到循环外面
页: [1]
查看完整版本: 混合编程中fortran调用C输出文件的问题?