如果要从用户读取的字符串包含空格,则在Fortran中使用read(星号,星号)似乎不起作用。 请考虑以下代码:
character(Len = 1000) :: input = ' '
read(*,*) input
如果用户输入字符串“Hello,我的名字是John Doe”,则只有“Hello”将存储在输入中;空间被忽视后的一切。我的假设是编译器假定“Hello”是第一个参数,而“my”是第二个,所以要捕获其他单词,我们必须使用类似read(,)input1,input2,input3 ......等。这种方法的问题是我们需要为每个输入创建大字符数组,并且需要准确知道将输入多少个单词。有没有办法解决??有些功能会实际读取整个句子,空格和所有内容吗?非常感谢!
答案 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
。