使用Fortran读取带空格的字符串

14

在Fortran中使用read(*,*)不能处理从用户输入的字符串中包含空格的情况。 请考虑以下代码:

    character(Len = 1000) :: input = ' '
    read(*,*) input
如果用户输入字符串“Hello,my name is John Doe”,那么只有“Hello”会被存储在输入中;空格后的所有内容都将被忽略。我的假设是编译器认为“Hello”是第一个参数,“my”是第二个参数,因此要捕获其他单词,我们必须使用类似read(*,*) input1, input2, input3...的方法。这种方法的问题是我们需要为每个输入创建大型字符数组,并且需要知道将输入多少个单词。
是否有任何方法可以解决这个问题?是否有一些函数可以实际读取整个句子,包括空格和所有内容?
2个回答

26
  character(100) :: line

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

  end

该代码将读取最大长度为100的文本行(对于大多数实际目的而言足够),并将其写回给您。可根据需要进行修改。


12

尝试使用 read(*, '(a)') 代替 read(*, *)。我不是Fortran专家,但是read的第二个参数是格式说明符(相当于C语言中sscanf 的第二个参数)。这里的*表示列表格式,而您不需要它。例如,如果要读取14个字符作为字符串,则可以使用a14


3
"read (, a)" 不是有效的语法... 格式说明符应该在括号和引号中,应写为 "read (, '(a)')" 或通过行号在格式语句上进行引用。 - M. S. B.
我还要指出的是,Fortran中的格式说明符与C语言中的sscanf并不完全等价。在某些方面它们非常相似,但它们有足够的不同之处,以至于我通常会查阅资料。你可以在这里或者这里找到不错的概述。 - jvriesem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接