我正在学习 Fortran 教程,但是下面的代码似乎不起作用。我试图从命令行读取 2 位数字,但是收到错误“TRIM(buffer)”处的 UNIT 规范必须是 INTEGER 表达式或 CHARACTER 变量。
INTEGER :: number
CHARACTER(LEN=20) :: buffer
buffer = ""
CALL GET_COMMAND_ARGUMENT(1, buffer)
READ(TRIM(buffer), FMT="(I2)") number
因此,据我了解,问题在于 READ 不确定 TRIM 的输出是否会返回 CHARACTER 值。我可以以某种方式声明它是一个角色还是有其他方法来解决这个问题?
为了它的值(value),我正在使用 gfortran。
最佳答案
TRIM(buffer)
确实返回一个字符值。然而,这是一个表达式,而不是变量。正如错误消息所示,表达式可以很好地给出单位编号,但在读取字符的情况下,则需要一个变量。
由于 TRIM
只是提供一个从 buffer
中删除尾随空格的值,因此不需要这样做:空格不会影响读取。相反,只需去
read(buffer, '(I2)') number
甚至
read(buffer(1:2), '(I2)') number
更一般地,可以将更复杂的字符表达式分配给变量,并在读取上下文中使用后一个变量。
关于fortran - 将命令行参数解析为字符串以在 Fortran 中存储整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25040576/