Io 使用“英特尔Fortran编译器”避免列表定向输出中的换行符

Io 使用“英特尔Fortran编译器”避免列表定向输出中的换行符,io,formatting,fortran,Io,Formatting,Fortran,我注意到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 “英特尔编译器ifort”提供了以换行符分隔的标准输出: 3.16227769851685 4.47213602066040

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

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

write(*,fmt='(5(F6.4,3X))') (r1(i), i =1,5)
输出应类似于:

3.1623   4.4721   5.4772   6.3246   7.0711   
不需要。列表导向(自由格式)输出提供了方便,但您放弃了控制。未指定输出的各个方面,允许编译器选择这些方面。如果要完全控制,必须使用格式化输出。

请参阅

指定FORT_FMT_RECL或use
写入(,“(G0,1X))”

自verson 14以来,“英特尔fortran编译器”具有换行边距功能。默认情况下,记录在80个字符后换行。要禁用此限制,应指定:

Linux上:-无换行边距

在WIndows上:/wrap页边距-


有关

的更多信息,请参见,谢谢,但我的意思仍然是“自由格式”说明。有时(特别是在调试阶段,需要快速输出时),数组的大小取决于参数,因此格式化是一项烦人的任务。您可以将
FMT
说明符与
DO
循环和
ADVANCE=“no”
结合使用。可能需要额外的几行代码,但如果这是您想要的…@gluuke好的,您需要的是列表定向输出,而不是自由格式。我相应地编辑了您的问题。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。请注意,可能存在一些问题,但仍然是最佳答案