1

私はFortran90/95を学んでおり、使用している本には、フォーマットステートメントに対するラインプリンターの影響についての議論がありました。この本によると、プログラムは行の最初の文字を使用して、前の行に対する行の位置を決定します(つまり、「1」は新しいページを開始し、「0」は行をスキップし、「+」は前の行を上書きし、 ''または他の文字は、前の行の下に新しい行を書き込みます)。これをテストするために、コンソールで簡単なプログラムをコンパイルして実行しましたが、この動作は観察されませんでした。

program test

integer :: i = 123
character(13) :: hello = 'Hello, World!'

100 format ('0','Count = ',I3)

write (*,*) hello
write (*,100) i

end program

出力は

 Hello, World!
0Count = 123

私が期待していた場所

 Hello, World!

Count = 123

なぜこれなのか誰か知っていますか?これはFortran90/95で使用されていないレガシー機能ですか?コンソールへの印刷の特定の動作ですか?書くときに、フォーマットステートメントで特別な最初の文字を宣言する必要があるのはいつか(もしあれば)知りたいです。

私のコンパイラはForce2.0.9で、これはgfortranに基づいていると思います。私はそれをWindows7で実行しており、コンソールはPowerShellです。

助けてくれてありがとう!

4

4 に答える 4

3

これは70年代、さらには80年代にFORTRAN 77以前のラインプリンターで使用されていました...しかし、最後にラインプリンターを見たのはいつですか?この機能を教えているFortran90/95の本は、捨てるべきです。

これはStackOverflowですでに回答されています:Fortran制御文字(キャリッジ制御)はまだコンパイラーに実装されていますか?

于 2011-06-02T03:16:02.923 に答える
2

これは、古い「固定形式」のFortran(77以前)にのみ適用され、すべてのコマンドを6つのスペースでインデントする必要がある新しい「自由形式」のFortran(90以降)には適用されません。適切なコンパイラフラグを使用して、固定形式を引き続き使用できます。拡張子が.f90ではなく.fの場合、これがデフォルトになることもあります。

于 2012-09-04T09:29:55.533 に答える
1

私はFortran90/95を学んでおり、使用している本には、フォーマットステートメントに対するラインプリンターの影響についての議論がありました。この本によると、プログラムは行の最初の文字を使用して、前の行に対する行の位置を決定します(つまり、「1」は新しいページを開始し、「0」は行をスキップし、「+」は前の行を上書きし、 ''または他の文字は、前の行の下に新しい行を書き込みます)。これをテストするために、コンソールで簡単なプログラムをコンパイルして実行しましたが、この動作は観察されませんでした。

これはFortranのレガシー機能の1つであり、(他に何もないとしても)プリンターに直接印刷されないため、今日ではほとんど無視されています。いずれにせよ、ほとんどのコンパイラー(gfortranがインストールされていないため、今は具体的に言うことができませんでした)には、その動作を無視するオプションがあり、一部のコンパイラーはデフォルトで最初の列を無視します。あなたが示したことから、あなたがそれらの1つであると仮定することは合理的であるため、そうです、あなたはそれを無視することができます。

この慣習に関する習慣から、多くのFortranプログラマーは、writeステートメントで空白または1xで文字列を開始します。

于 2011-06-02T03:21:32.927 に答える
1

Fortran 90/95は私にはあまりにも最近のものですが、70年代にFORTRANを使用していたこれらのフォーマットオプションを思い出せません。

それでも、これはレガシー機能だと思います。行を上書きするために「+」が付いているという事実は、オプションがコンソール画面ではなくラインプリンターへの出力を目的としていることを示唆しています。

于 2011-06-02T03:01:56.713 に答える