我注意到Fortran中列表导向的输出write(*,*)
的结果依赖于编译器。
确实,使用代码:
program one
real(8), dimension(5):: r1
do i=1,5
r1(i)=sqrt(i*10.0)
end do
write(*,*) (r1(i), i =1,5)
end program one
intel编译器ifort给出了换行符打破的标准输出:
3.16227769851685 4.47213602066040 5.47722530364990
6.32455539703369 7.07106781005859
而gfortran给出了等效的一行结果:
3.1622776601683795 4.4721359549995796 5.4772255750516612 6.3245553203367590 7.0710678118654755
我认为ifort每行最多写3个项目(当浮动实数时)。
有没有办法让ifort输出像gfrotran,即避免换行?
理想情况下,我想保留列表导向的输出(*,*)
指令,所以我正在寻找类似编译器选项的东西,如果有的话。
答案 0 :(得分:7)
没有。列表定向(自由格式)输出提供了便利,但您放弃了控制。输出的各个方面未指定,并允许选择给编译器。如果您想要完全控制,则必须使用格式化输出。
答案 1 :(得分:5)
从第14节开始,intel fortran编译器具有wrap-margin函数。默认情况下,记录包含80个字符。要禁用此限制,您应指定:
Linux上的: - no-wrap-margin
在WIndows上的:/ wrap-margin -
答案 2 :(得分:2)
查看您最喜爱的Fortran书籍或在线文档中的编辑描述符。您可以在fmt
语句中使用write
说明符来指定编辑描述符。例如:
write(*,fmt='(5(F6.4,3X))') (r1(i), i =1,5)
应输出类似于:
的内容3.1623 4.4721 5.4772 6.3246 7.0711
答案 3 :(得分:-2)
请参阅https://software.intel.com/en-us/forums/topic/401555
指定FORT_FMT_RECL或使用 写(," (G0,1X))"