2017-01-04 23 views
2

は、私は、次のループを含むFortranのプログラムがあるとします。ループ内の1行で印刷する方法は?

do i=1, 10 
    print *, i 
enddo 

これの出力は

私は、次のように、単一の行にこれらの値を書き込むことができますどのように
1 
2 
... 
10 

のようになります?

1 2 ... 10 

答えて

3

いくつかの方法がありますが、すぐに頭に浮かぶ2は、以下の小さなプログラム

$ 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は、書かれているレコードマーカの終わりを抑制します。これは、通常は改行ですが、明示的な書式を必要とします。 2番目の暗黙のdoループは、書式を必要としませんが、柔軟性は低くなります。

英語では通常「ループ」と呼ばれます

+0

ありがとう、それは動作します。 – BogdanSikach

+0

私は最初の方法が一番好きです。コンパイラによっては、2番目の方法で出力を複数の行に分割することがあります。 – Ross

関連する問題