在Fortran中读取带空格的字符串

时间:2011-06-12 01:47:50

标签: string fortran fortran90 gfortran fortran77

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

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

如果用户输入字符串“Hello,我的名字是John Doe”,则只有“Hello”将存储在输入中;空间被忽视后的一切。我的假设是编译器假定“Hello”是第一个参数,而“my”是第二个,所以要捕获其他单词,我们必须使用类似read(,)input1,input2,input3 ......等。这种方法的问题是我们需要为每个输入创建大字符数组,并且需要准确知道将输入多少个单词。有没有办法解决??有些功能会实际读取整个句子,空格和所有内容吗?非常感谢!

2 个答案:

答案 0 :(得分:23)

  character(100) :: line

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

  end

...将读取最大长度为100的文本行(足以用于大多数实际目的)并将其写回给您。根据自己的喜好进行修改。

答案 1 :(得分:9)

而不是read(*, *),请尝试read(*, '(a)')。我不是Fortran专家,但read的第二个参数是格式说明符(相当于C中sscanf的第二个参数)。 *表示您不想要的列表格式。例如,如果要将14个字符作为字符串读取,也可以说a14