Fortran 如何在循环中打印一行?

Fortran 如何在循环中打印一行?,fortran,Fortran,假设我有一个Fortran程序,其中包括以下循环: do i=1, 10 print *, i enddo 这个的输出将是 1 2 ... 10 如何将这些值写入一行,如下所示 1 2 ... 10 有很多种方法,下面的小程序中显示了两种立即浮现在脑海中的方法 $ cat loop.f90 Program loop Implicit None Integer :: i Write( *, * ) 'First way - non-advancing I/O' Do i

假设我有一个Fortran程序,其中包括以下循环:

do i=1, 10
  print *, i
enddo
这个的输出将是

1
2
...
10
如何将这些值写入一行,如下所示

1 2 ... 10

有很多种方法,下面的小程序中显示了两种立即浮现在脑海中的方法

$ cat loop.f90
Program loop
  Implicit None
  Integer :: i
  Write( *, * ) 'First way - non-advancing I/O'
  Do i = 1, 10
     Write( *, '( i0, 1x )', Advance = 'No' ) i
  End Do
  Write( *, * ) ! Finish record
  Write( *, * ) 'Second way - implied do loop'
  Write( *, * ) ( i, i = 1, 10 )
End Program loop
$ gfortran -std=f2003 -Wall -Wextra -fcheck=all loop.f90 
$ ./a.out
 First way - non-advancing I/O
1 2 3 4 5 6 7 8 9 10 
 Second way - implied do loop
           1           2           3           4           5           6           7           8           9          10
$ 
第一种方法。非前进I/O,抑制正在写入的记录结束标记,该标记通常是新行,但确实需要显式格式。第二个是隐含的do循环,不需要格式,但灵活性较差


顺便说一句,在英语中,它们通常被称为“循环”

我最喜欢第一种方法-根据编译器的不同,第二种方法可能会将输出拆分为几行。