Fortran Coder

查看: 18105|回复: 10
打印 上一主题 下一主题

[输入输出] 出错信息output statement overfolws record,求助

[复制链接]

28

帖子

5

主题

0

精华

熟手

F 币
231 元
贡献
127 点
跳转到指定楼层
楼主
发表于 2014-6-25 14:16:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
程序用IVF编译成功,没有报错,但是运行的时候出现图中的错误


请问我该怎么找出错误?
并且运行调试的时候也出错了


该怎么办啊?
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

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

沙发
发表于 2014-6-25 18:04:54 | 只看该作者
这个错误是由于内部文件转换时,字符串长度不够导致的。

比如

[Fortran] 纯文本查看 复制代码
character(len=5) :: c  
write(c,'(i6)') 123456

28

帖子

5

主题

0

精华

熟手

F 币
231 元
贡献
127 点
板凳
 楼主| 发表于 2014-6-26 11:46:37 | 只看该作者
fcode 发表于 2014-6-25 18:04
这个错误是由于内部文件转换时,字符串长度不够导致的。

比如

write的格式不应该是WRITE(设备号,输出格式)吗,用字符占据设备号的位置是什么意思?并且我运行了一下,没有输出任何东西。

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

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

地板
发表于 2014-6-26 12:13:08 | 只看该作者
这是内部文件的用法。表示把其他类型的变量,输出到字符串里。
(你可以认为这个字符串是一个存在于内部的“文件”)

unit -5 , file Internal Formatted Write
表示你的错误正是“内部文件”出现的问题。

28

帖子

5

主题

0

精华

熟手

F 币
231 元
贡献
127 点
5#
 楼主| 发表于 2014-6-26 13:02:36 | 只看该作者
fcode 发表于 2014-6-26 12:13
这是内部文件的用法。表示把其他类型的变量,输出到字符串里。
(你可以认为这个字符串是一个存在于内部的 ...

就等同于把其他类型变量的值转成字符型然后赋值,这样理解可以吗?所以你上面例子中的c的长度一定要大于或等于6.

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

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

6#
发表于 2014-6-26 13:06:23 | 只看该作者
是的。你的错误就是字符串不够长。

28

帖子

5

主题

0

精华

熟手

F 币
231 元
贡献
127 点
7#
 楼主| 发表于 2014-6-26 13:14:59 | 只看该作者
fcode 发表于 2014-6-26 13:06
是的。你的错误就是字符串不够长。

多谢管理员!话说这个已解决是你加上去的吗,我还以为需要发帖本人修改帖子状态呢。

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

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

8#
发表于 2014-6-26 13:16:55 | 只看该作者
是的,我加的。不用你编辑。

28

帖子

5

主题

0

精华

熟手

F 币
231 元
贡献
127 点
9#
 楼主| 发表于 2014-6-26 13:35:06 | 只看该作者
fcode 发表于 2014-6-26 13:16
是的,我加的。不用你编辑。

那你岂不是很辛苦,哈哈。还有一个问题。
[Fortran] 纯文本查看 复制代码
subroutine intoch ( cvar, ivar, ilend)
c***********************************************************************
c*                                                                     *
c*   PURPOSE:  Write integer left-justified into character variable    *
c*                                                                     *
c* ARGUMENTS:  CVAR  - character variable receiving integer            *
c*             IVAR  - integer to write into character                 *
c*             ILEND - obsolete                                        *
c*                                                                     *
c***********************************************************************

c---- Dummy arguments
      character*(*) cvar
      integer ivar, ilend
c--   Local working storage
      character cform*5
      integer ilen, ivara
c---- Find required length to write IVAR, including sign
      ivara = abs(ivar)
      ilen = 1
      mag = 10
      do 100 i=1,10
      if (ivara.lt.mag) go to 200
      ilen = ilen + 1
  100 mag = mag * 10
  200 if (ivar.lt.0) ilen = ilen + 1
c---- Write IVAR into CVAR, left justified.  If CVAR length is not
c     enough, FORTRAN error handling is used ('*****')
      ilen = min(ilen,len(cvar))
      write (cform,'(a,i2,a)') '(I',ilen,')'
      cvar = ' '
      write (cvar,cform) ivar
      return
      end


倒数第三行,为什么cform也写到了格式的位置,难道是按照cform的格式表示ivar,然后将值赋给cvar?

28

帖子

5

主题

0

精华

熟手

F 币
231 元
贡献
127 点
10#
 楼主| 发表于 2014-6-26 14:22:08 | 只看该作者
fcode 发表于 2014-6-26 13:16
是的,我加的。不用你编辑。

我明白了,上面的程序我看懂了。多谢管理员。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-24 07:53

Powered by Tencent X3.4

© 2013-2024 Tencent

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