FORTRAN(READその2)

アニメ『クジラの子らは砂上に歌う』

砂の海を漂流する泥クジラという漂泊船で五百人ぐらいの人たちの物語、なんでしょうけど、一話しか見てないので、まだわからないです。 継続して見ていけばきっと面白いのでしょうけど、続きを見る衝動が湧いてこないです。もう少し見てからこの感想を更新しようと思います。

READのおさらいです。
キーボードから改行で区切った2値を入力して2つの変数へ代入するには、FORMATで/を使えばよかったですが、

      READ (*,11111) I,J
11111 FORMAT(I5/I5)
takk@deb9:~$ ./a.out
20
30
I =   20,J=   30
takk@deb9:~$

,(カンマ)で区切った場合、入力できないと思い込んでいましたができました。
キーボードから入力する値を,(カンマ)で区切ればよいだけでした。

      READ (*,11111) I,J
11111 FORMAT(I5,I5)
takk@deb9:~$ ./a.out
20,30
I =   20,J=   30
takk@deb9:~$

実はREAD文だけで、FORMATも必要ありません。

takk@deb9:~$ cat read.f
      PROGRAM MAIN
      READ (*,*) I,J
      WRITE(*,22222) I,J
22222 FORMAT('I =',I5,',J=',I5)
      STOP
      END
takk@deb9:~$ gfortran read.f
takk@deb9:~$ ./a.out
20,30
I =   20,J=   30
takk@deb9:~$

このように、READの第2引数も*にしておけば、,(カンマ)で区切った数値を各変数に代入できます。そしてこの方法のすばらしさが、改行にも使えるということ。

takk@deb9:~$ ./a.out
20
30
I =   20,J=   30
takk@deb9:~$

READはFORMAT要らないですね。
,(カンマ)や、Enterキーの入力が面倒な場合は、スペースキーで区切ることもできます。

takk@deb9:~$ ./a.out
20 30
I =   20,J=   30
takk@deb9:~$

,とEnterの混在でも認識してくれます。

takk@deb9:~$ ./a.out
20,
30
I =   20,J=   30
takk@deb9:~$

指定された変数以上に値がある場合はどうなるでしょうか。

takk@deb9:~$ ./a.out
20,30,40
I =   20,J=   30
takk@deb9:~$

最初の2値のみ代入されたようです。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA