Fortran Coder

查看: 945|回复: 2
打印 上一主题 下一主题

[输入输出] 内部文件使用报错Fortran runtime error: End of record

[复制链接]

4

帖子

2

主题

0

精华

新人

F 币
25 元
贡献
13 点
跳转到指定楼层
楼主
发表于 2024-7-19 16:58:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xk6891 于 2024-7-19 17:00 编辑

[Fortran] 纯文本查看 复制代码
program main
implicit none
integer charnum
character,allocatable::smi(:)
!!character(len=30)::smi
character(len=1)sinelem
character(len=2)douelem
charnum=30
allocate(smi(charnum))
smi=''
sinelem="A"
douelem="BB"

write(smi(1:1),"(A1)")sinelem
write(*,*)smi
write(smi(2:3),"(A2)")douelem
write(*,*)smi

end

出现报错
[Fortran] 纯文本查看 复制代码
 A
At line 16 of file test.f90
Fortran runtime error: End of record

Error termination. Backtrace:

单个字母是可以输入到内部文件的,多个字母就会出现这个错误。
看到有的帖子说是由于动态长度字符串的原因,因此把动态长度的字符串屏蔽掉,采用固定长度的字符串,是正常输出的
[Fortran] 纯文本查看 复制代码
program main
implicit none
integer charnum
!!character,allocatable::smi(:)
character(len=30)::smi
character(len=1)sinelem
character(len=2)douelem
charnum=30
!!allocate(smi(charnum))
smi=''
sinelem="A"
douelem="BB"

write(smi(1:1),"(A1)")sinelem
write(*,*)smi
write(smi(2:3),"(A2)")douelem
write(*,*)smi

end

输出如下
[Fortran] 纯文本查看 复制代码
 A
ABB

问题出在哪里?
既然动态长度字符串的内部文件能够输入单个字母,应该不是动态长度与固定长度的问题吧?但也无更好解释


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

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

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

沙发
发表于 2024-7-19 21:26:58 | 只看该作者
character,allocatable::smi(:)
这是一个字符数组,注意是数组。
所以 smi(2:3) 也是一个数组,有2个元素,每个元素长度都是1。

character(len=30)::smi
这是一个字符串(单变量)。
所以 smi(2:3) 是一个子字符串,单变量,长度为 2。


你可以用“递延长度字符串”来代替“可分配字符数组
[Fortran] 纯文本查看 复制代码
character(len=:) , allocatable :: smi
allocate( character(len=30)::smi )
deallocate(smi)
详解 http://diyanzifuchuan.w.fcode.cn/

4

帖子

2

主题

0

精华

新人

F 币
25 元
贡献
13 点
板凳
 楼主| 发表于 2024-7-19 22:35:19 | 只看该作者
fcode 发表于 2024-7-19 21:26
character,allocatable::smi(:)
这是一个字符数组,注意是数组。
所以 smi(2:3) 也是一个数组,有2个元素, ...

啊啊啊,对了,这是数组不是字符串。感谢大佬提醒,谢谢
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-23 23:10

Powered by Tencent X3.4

© 2013-2024 Tencent

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