程序用于计算其用户输入的实数的平方根,但拒绝计算复数(在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
答案 0 :(得分:1)
if(dataType.n.real
不是用于比较数据类型的Fortran方法,因此没有理由在此处使用类似的方法。 n
被声明为real
,因此即使它恰好包含整数值,也始终为real
。
(高性能标记在其注释中解释了编译器在dataType.n.real
中看到的内容,它看到将运算符.n.
应用于两个变量dataType
和real
。而且它抱怨说它不知道.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