11

如果要从用户读取的字符串包含空格,则在 Fortran 中使用 read(asterisk, asterisk) 似乎不起作用。考虑以下代码:

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

如果用户输入字符串“Hello, my name is John Doe”,输入中只会存储“Hello”;忽略空格后的所有内容。我的假设是编译器假定“Hello”是第一个参数,而“my”是第二个参数,所以要捕获其他词,我们必须使用类似 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 专家,但 to 的第二个参数read是格式说明符(相当于sscanfC 中的第二个参数)。 *这意味着您不想要的列表格式。例如,您也可以说a14是否要将 14 个字符作为字符串读取。

于 2011-06-12T02:11:33.483 回答