8

我注意到write(*,*)Fortran 中列表导向输出的结果取决于编译器。

确实,使用代码:

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

英特尔编译器 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 一样,即避免换行符?理想情况下,我想保留列表导向的输出(*,*)指令,所以我正在寻找类似编译器选项的东西,如果有的话。

4

4 回答 4

7

从第 14 版开始,intel fortran 编译器具有 wrap-margin 功能。默认情况下,记录在 80 个字符后换行。要禁用此限制,您应该指定:

在 Linux 上:-no-wrap-margin

在 Windows 上:/wrap-margin-

在英特尔 Fortran 参考指南中查看更多信息

于 2014-11-04T12:51:59.960 回答
7

不会。列表导向(自由格式)输出提供了便利,但您放弃了控制。输出的各个方面都未指定,并允许编译器选择。如果你想要完全控制,你必须使用格式化输出。

于 2013-07-01T15:23:39.713 回答
2

查看您最喜欢的 Fortran 书籍或在线文档中的编辑描述符。您可以fmtwrite语句中使用说明符来指定编辑描述符。例如:

write(*,fmt='(5(F6.4,3X))') (r1(i), i =1,5)

应该输出类似于:

3.1623   4.4721   5.4772   6.3246   7.0711   
于 2013-07-01T14:57:12.180 回答
-2

请参阅https://software.intel.com/en-us/forums/topic/401555

指定 FORT_FMT_RECL 或使用 write ( ," (G0,1X))"

于 2014-05-19T07:41:54.823 回答