ユーザーから読み取る文字列にスペースが含まれている場合、Fortranでread(アスタリスク、アスタリスク)を使用しても機能しないようです。次のコードについて考えてみます。
character(Len = 1000) :: input = ' '
read(*,*) input
ユーザーが文字列「Hello、my name is John Doe」を入力すると、「Hello」のみが入力に保存されます。スペースの後のすべては無視されます。私の仮定では、コンパイラは「Hello」が最初の引数であり、「my」が2番目の引数であると想定しているため、他の単語をキャプチャするには、read(、のようなものを使用する必要があります。 =)input1、input2、input3 ...など。このアプローチの問題は、入力ごとに大きな文字配列を作成する必要があり、入力される単語の数を正確に知る必要があることです。これを回避する方法はありますか?文全体、スペース、その他すべてを実際に読み取る関数はありますか?どうもありがとう!
character(100) :: line
write(*,'("Enter some text: ",\)')
read(*,'(A)') line
write(*,'(A)') line
end
...最大長100(ほとんどの実用的な目的に十分)のテキスト行を読み取り、それを書き戻します。お好みに合わせて変更してください。
read(*, *)
の代わりに、read(*, '(a)')
を試してください。私はFortranの専門家ではありませんが、read
の2番目の引数はフォーマット指定子です(Cのsscanf
の2番目の引数と同等です)。 *
そこには、不要なリスト形式があります。たとえば、14文字を文字列として読みたい場合は、a14
と言うこともできます。