评估在 Fortran90 的派生类型中定义的字符串的特定字母

Evaluating a specific letter of a string defined in a derived type in Fortran90

我想判断变量myline的第3个字母是否为'C'

我试试这个:

program main

    implicit none

    type line
        integer                     :: count    = 5
        character(len=48)           :: list     = 'ABCDE'
    end type

    type(line)                      :: myline
    character(len=1)                :: letter   = 'C'

    write(*,*) myline%count, myline%list

    if(myline%list(3) == letter) then
        write(*,*) 'TRUE'
    else
        write(*,*) 'FALSE'
    end if

end program

但我得到:

$ /usr/local/bin/gfortran8 -mcmodel=medium -fcheck=all -Wl,-rpath=/usr/local/lib/gcc8 -o test test.f90
test.f90:15:15:

  if(myline%list(3) == letter) then
               1
Error: Syntax error in IF-expression at (1)
test.f90:17:5:

  else
     1
Error: Unexpected ELSE statement at (1)
test.f90:19:4:

  end if
    1
Error: Expecting END PROGRAM statement at (1)

我正在使用 gfortran (gcc8) 和 Fortran 90 标准。

在 Fortran 中,字符子串引用总是需要一个开始和结束位置。所以你想要的是 myline%list(3:3).

你可以省略结束位置(保留冒号),例如(3:),这意味着字符串的其余部分。同样,您可以省略起始位置,这意味着从第一个字符 (:3).

作为一个建议,letter 最好用 parameter 属性声明,因为它是一个常量,但你所拥有的会起作用。