if(dataType.n.real
не является способом сравнения типов данных на Фортране, и здесь нет причин использовать что-то подобное.n
объявлено real
, поэтому оно всегда real
, даже если оно содержит целочисленное значение.
(High Performance Mark объяснил в своем комментарии, что компилятор видит в dataType.n.real
, он видит оператор .n.
, примененный к двум переменным dataType
и real
. И жалуется, что онне знает оператор .n.
и позже может жаловаться, что он также не знает переменную dataType
.
Фортран - это язык статической типизации, и если вы объявите свою переменную real :: a
, то онпросто типа real
навсегда.Он отличается от динамических языков, таких как Python.Если пользователь пытается ввести что-то недопустимое (для real
), оператор read
завершится неудачно.Это может контролироваться аргументом iostat=
или err=
).
integer :: ier
read(*,*,iostat=ier) n
if (ier/=0) then
!invalid input, do what is necessary
end if