【问题标题】:Fortran output on two lines instead of one两行而不是一行的 Fortran 输出
【发布时间】:2014-03-25 14:54:22
【问题描述】:

我正在运行一个 fortran 90 程序,该程序具有一个 i=1 到 40 的 alpha 值数组。我正在尝试使用以下代码将该数组输出为 5 行,每行 8:

write(4,*) "alpha "
write(4,*)alpha(1), alpha(2), alpha(3), alpha(4), alpha(5), alpha(6), alpha(7), alpha(8)
write(4,*)alpha(9), alpha(10), alpha(11), alpha(12), alpha(13), alpha(14), alpha(15), alpha(16) 
write(4,*)alpha(17), alpha(18), alpha(19), alpha(20), alpha(21), alpha(22), alpha(23), alpha(24)
write(4,*)alpha(25), alpha(26), alpha(27), alpha(28), alpha(29), alpha(30), alpha(31), alpha(32)
write(4,*)alpha(33), alpha(34), alpha(35), alpha(36), alpha(37), alpha(38), alpha(39), alpha(40)

其中 4 是所需的输出文件。但是当我打开输出时,有 10 行而不是 5 行,每行有 5 个值,然后 3 个值交替出现。知道我可以做些什么来避免这种情况吗?

谢谢。

【问题讨论】:

    标签: io fortran


    【解决方案1】:

    使用格式化的 IO。面向列表的 IO(即,带有“*”)被设计为简单但未完全指定。不同的编译器会产生不同的输出。尝试以下方法:

    write (4, '( 8(2X, ES14.6) )' )  alpha (1:8)
    

    或者使用循环:

    do i=1, 33, 8
       write (4, '( 8(2X, ES14.6) )' )  alpha (i:i+7)
    end do
    

    【讨论】:

      【解决方案2】:

      写 (4,"(8(1x,f0.4))") 阿尔法

      在 5 行中打印 40 个数字,因为在 Fortran“格式还原”中,当您到达末尾时会重新使用该格式,并在新行上打印更多数据。

      http://www.obliquity.com/computer/fortran/format.html 网站说这是关于格式还原的:

      "如果数据传输列表中的项少于数据描述符,则所有未使用的描述符都将被忽略。但是,如果数据传输列表中的项多于数据描述符,则强制发生反转。在这种情况下,FORTRAN 77 前进到下一条记录并重新扫描格式,从最右边的左括号开始,包括任何重复计数指示符。然后重新使用这部分格式。如果没有FORMAT 语句中的内括号,则整个格式被重用。"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多