评估在 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
属性声明,因为它是一个常量,但你所拥有的会起作用。
我想判断变量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
属性声明,因为它是一个常量,但你所拥有的会起作用。