Io 使用“英特尔Fortran编译器”避免列表定向输出中的换行符
我注意到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
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好的,您需要的是列表定向输出,而不是自由格式。我相应地编辑了您的问题。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。请注意,可能存在一些问题,但仍然是最佳答案