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

Gau*_*tam 11 string fortran gfortran fortran77 fortran90

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

    character(Len = 1000) :: input = ' '
    read(*,*) input
Run Code Online (Sandbox Code Playgroud)

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

Roo*_*ook 24

  character(100) :: line

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

  end
Run Code Online (Sandbox Code Playgroud)

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


Joh*_*nck 9

而不是read(*, *),尝试read(*, '(a)').我不是Fortran专家,但第二个参数read是格式说明符(相当于sscanfC中的第二个参数). *这意味着你不想要的列表格式.例如,您还可以说a14是否要将14个字符作为字符串读取.

  • read(*,a)是无效的语法...格式说明符应该在括号和引号中,read(*,'(a)'),或在格式语句中,并通过行号引用. (3认同)