防止自己遗忘系列:Fortran中write语句中不换行命令

背景

由于需要写一个程序将所有结果在不换行的情况下输出,但Fortran程序中虽然没设置换行,输出的结果仍然会每5个循环换行一次(目前还不清楚原因,如果有看出问题的朋友请不吝指教!附输出部分的原程序:)

思考如何加入新命令实现不换行

步骤

上面的原始程序的输出结果如下(nsteps为2500,每个pos02代表的是对应粒子的xyz坐标,33*3即每行应当有99个数据,但现在是每5个会换行一次):

检索到Fortran语言中可实现不换行的三种方法:

write(*,'(1x,f10.6,$)’) target   可行

write(*,'(1x,f10.6\)') target   可行

write(*,'(1x,f10.6)',advance='no') target   不可行

1.  write(*,'(1x,f10.6,$)’) target 可行

分析:

“write(*, ...)”:指定将数据写入到标准输出,*即屏幕;
“(1x,f10.6 ,$)”:是格式控制符,用于指定输出的格式:
“1x”:表示输出前面有一个空格。`1x` 表示一个空格,`2x` 表示两个空格,以此类推;
“f10.6”:指定浮点数的格式,“f”表示浮点数,“10.6” 表示总宽度为10个字符,小数部分占6个字符;
“$”:表示结束当前的输出行,即换行,在Fortran中,`$` 符号通常用于控制输出行的结束。

测试:

这里我把第一个write后的i删掉了,不会影响输出的效果,仅方便后续是数据处理而已

这个方法可以清楚的看见,所有数据仅2501行(第一行空过去了),每行数据是99个(这个感兴趣可以自己数下~)

2.  write(*,'(1x,f10.6\)') target 可行

分析:

“\”:表示结束当前的输出行,即换行。

测试:

和第一个输出的结果一样

3.  write(*,'(1x,f10.6)',advance='no') target 不可行

分析:

“advance='no'”:参数则是告诉 Fortran 在输出后不要自动换行。

测试:

看起来没什么问题

这个结果输出就很明显不对了,应该是没识别出“no”吧。至少前两个方法可行~ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值