我正在关注Fortran教程,但下面的代码似乎不起作用。我试图从命令行读取一个2位数字,但是我得到错误UNIT规范“TRIM(缓冲区)”必须是INTEGER表达式或CHARACTER变量。
INTEGER :: number
CHARACTER(LEN=20) :: buffer
buffer = ""
CALL GET_COMMAND_ARGUMENT(1, buffer)
READ(TRIM(buffer), FMT="(I2)") number
所以我理解的问题是,READ不确定TRIM的输出是否会返回CHARACTER值。我可以以某种方式声明它是一个CHARACTER还是有另一种解决这个问题的方法?
值得我使用gfortran。
答案 0 :(得分:3)
TRIM(buffer)
确实返回一个字符值。但是,这是表达式而不是变量。正如错误消息所示,表达式可用于给出单元号,但在从字符读取时,需要变量。
由于TRIM
仅用于提供从buffer
剥离的尾随空格的值,因此不需要:空格不会影响阅读。相反,只需去
read(buffer, '(I2)') number
甚至
read(buffer(1:2), '(I2)') number
更一般地说,可以为变量赋予更复杂的字符表达式,并在读取上下文中使用后者变量。