11

ユーザーから読み取られる文字列にスペースが含まれている場合、Fortran で read(asterisk, asterisk) を使用しても機能しないようです。次のコードを検討してください。

    character(Len = 1000) :: input = ' '
    read(*,*) input

ユーザーが文字列「Hello, my name is John Doe」を入力すると、「Hello」のみが入力に格納されます。スペース以降はすべて無視されます。私の推測では、コンパイラは "Hello," が最初の引数で、"my" が 2 番目の引数であると想定しているため、他の単語をキャプチャするには、read( , ) input1, input2, input3 のようなものを使用する必要があります。 ...など。このアプローチの問題は、入力ごとに大きな文字配列を作成する必要があり、入力される単語の数を正確に知る必要があることです。これを回避する方法はありますか?? 文全体、スペース、およびすべてを実際に読み取る関数はありますか? どうもありがとう!

4

2 に答える 2

24
  character(100) :: line

  write(*,'("Enter some text: ",\)')
  read(*,'(A)') line
  write(*,'(A)') line

  end

... 最大長 100 のテキスト行 (ほとんどの実用的な目的には十分) を読み取り、それを書き戻します。好みに合わせて変更してください。

于 2011-06-12T02:16:46.910 に答える
9

の代わりにread(*, *)、を試してくださいread(*, '(a)')。私はFortranの専門家ではありませんが、の2番目の引数はフォーマット指定子です( C readの2番目の引数と同等です)。そこにはあなたが望まないリスト形式があります。たとえば、14文字を文字列として読みたいかどうかを言うこともできます。sscanf*a14

于 2011-06-12T02:11:33.483 に答える