Неизвестный оператор n в Фортране - PullRequest
0 голосов
/ 28 января 2019

Программа предназначена для вычисления sqrt действительных чисел, введенных ее пользователем, но отклоняет вычисление комплексных чисел (в операторе if).Пользователь должен иметь возможность выйти из программы, когда захочет.На if(dataType.n.real)then есть ошибка, предупреждение о сборке сообщения "Неизвестный оператор n".Что я делаю не так?

!square of a number
  real:: x,n
  integer::a
  write (*,*) "1 to continue, or any key to exit: "
  read(*,*)a
  do while(a==1)
    write(*,*)"Type the value of n"
    read(*,*)n
    if(dataType.n.real) then
        x=sqrt(n)
        write(*,*)"x = "
        write(*,*)x
        else
            write(*,*)"Please enter a real number: "
            end if
            write (*,*) "Press 1 to continue, or any key to exit: "
            read (*,*)a
            end do
            stop
            end

1 Ответ

0 голосов
/ 28 января 2019

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...