Fortran Coder

查看: 6930|回复: 1
打印 上一主题 下一主题

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

[复制链接]

8

帖子

3

主题

0

精华

入门

F 币
30 元
贡献
16 点
跳转到指定楼层
楼主
发表于 2016-1-6 16:54:41 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
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文件,每个文件里面都有一万行,

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

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


分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2016-1-6 19:32:12 | 只看该作者
你循环了多次,每次都打开文件写入关闭。当第二次打开文件时,写入就会覆盖第一次的内容。

请把 fopen 放到循环外面
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-7 01:16

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表