Fortran中的未知运算符n

时间:2019-01-28 07:15:02

标签: debugging fortran

程序用于计算其用户输入的实数的平方根,但拒绝计算复数(在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 :(得分:1)

if(dataType.n.real不是用于比较数据类型的Fortran方法,因此没有理由在此处使用类似的方法。 n被声明为real,因此即使它恰好包含整数值,也始终为real

(高性能标记在其注释中解释了编译器在dataType.n.real中看到的内容,它看到将运算符.n.应用于两个变量dataTypereal。而且它抱怨说它不知道.n.运算符,后来又可能抱怨说它也不知道dataType变量。)

Fortran是一种静态类型的语言,如果您声明变量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