背景
由于需要写一个程序将所有结果在不换行的情况下输出,但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”吧。至少前两个方法可行~