爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5290|回复: 8

[求助] 各位大神,fortran输出字符串在哪补空位啊?

[复制链接]

新浪微博达人勋

发表于 2014-8-28 15:02:11 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
帮同事看了段程序,自己回来写了个简单的例子,发现不懂fortran了
program cha
character(len=10):: str
str='abcde'
open(11,file='a.txt')
write(11,"(a10)") str
write(11,"(a10)") 'abcde'
end program cha

输出的结果是
abcde*****
*****abcde
“*”表示空格,为何两个不一样啊,输出字符串到底在哪补空格啊?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-28 15:30:13 | 显示全部楼层
估计是编译器的问题吧,按照书上讲的,两个结果应该是一样的。因为域宽10大于字符串实际宽度5,所以应该右对齐左补空格输出!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-28 15:45:47 | 显示全部楼层
lysx 发表于 2014-8-28 15:30
估计是编译器的问题吧,按照书上讲的,两个结果应该是一样的。因为域宽10大于字符串实际宽度5,所以应该右 ...

我以前也是这么理解的,在左边补空格,但是我用visual fortran 6.6和 ifort 和gfortran上都试过了,出现如题结果,很是费解啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-28 15:47:53 | 显示全部楼层
我觉得吧,这两个结果都对。
第一个结果是把5个字符先赋值给一个10位的字符串,这样自然是从左到右的占位方式,输出时也就是左对齐
第二个结果是直接输出一个5位字符串,但是表控要求10位,所以就在左侧补齐。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-28 16:01:47 | 显示全部楼层
Fortran在直接输出字符型变量的时候,在规定字段宽度内右对齐左补空格
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-28 16:49:51 | 显示全部楼层
lqouc 发表于 2014-8-28 15:47
我觉得吧,这两个结果都对。
第一个结果是把5个字符先赋值给一个10位的字符串,这样自然是从左到右的占位 ...

恩,明白了,谢谢,我又通过read语句试了下,确实如你所说,定义字符串大小以后,分配给相应大小的内存,无论是“赋值”还是“read” 都会记住后面的空格。输出的时候按照表控格式,左侧补齐输出。
program cha
character(len=10):: str
!str=' abcde'
open(12,file='b.txt')
read(12,*) str
!  read(12,"(a10)") str
open(11,file='a.txt')

write(11,"(a10)") str
write(11,"(a10)") trim(str)
write(11,"(a10)") 'abcde'

end program cha

输出结果是:
abcde*****
*****abcde
*****abcde
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-28 16:52:34 | 显示全部楼层
lightxxia 发表于 2014-8-28 16:01
Fortran在直接输出字符型变量的时候,在规定字段宽度内右对齐左补空格

本质上是这样的,但是遇到了特殊情况,仔细尝试了一下,得到了新的体会,谢谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-28 18:40:55 | 显示全部楼层
太好了,谢谢分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-29 08:19:26 | 显示全部楼层
字符串是右边补空格,但是"a10"是格式说明,左边补空格。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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