Fortran输出两行而不是一行

时间:2014-03-25 14:54:22

标签: io fortran

我正在运行一个fortran 90程序,它有一个alpha值数组,其中i = 1到40.我尝试使用下面的代码将数组输出到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个值交替。知道我能做些什么来避免这种情况吗?

感谢。

2 个答案:

答案 0 :(得分:4)

使用格式化的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

答案 1 :(得分:4)

写(4,"(8(1x,f0.4))")alpha

打印超过5行的40个数字,因为在Fortran"格式还原"当您到达其末尾时,将重新使用该格式,并在新行上打印更多数据。

网站http://www.obliquity.com/computer/fortran/format.html说明了格式回复:

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