回 帖 发 新 帖 刷新版面

主题:[讨论]关于Fortran中IF的一个用法。

看老的Fortran代码发现了IF的一个用法,写了测试代码如下:

PROGRAME test1
    IMPLICIT NONE
    INTEGER :: iIn
    WRITE(*,*)"输入一个整数"
    READ(*,*) iIn
    IF(iIn) 100,200,300
100 WRITE(*,*) "您输入的不是0!" 
200 WRITE(*,*) "您输入的是0!" 
300 WRITE(*,*) "Stop"
    STOP
END PROGRAME test1

结果是:
输入正数,打印:
Stop;
输入负数,打印:
您输入的不是0!
您输入的是0!
Stop ;
输入0,打印:
您输入的是0!
Stop ;

和我开始想的仅判断0与非0的不太一样。编译器是IVF2011,其他编译器没有测试。如果判断语句是IF(iIn/=0),则打印正常。不知是不是IF的这个用法就是这样默认的?

回复列表 (共4个回复)

沙发

这是老用法,被抛弃的了.
老老实实写
if(iIn<0) then
...
else if()
...
else
...
end if
这样不好?

板凳

现在编程当然用规范的写法,但是我发现的这个写法是来自一个老的俄罗斯程序,他的判断就是这样写的。俄罗斯人写的程序别的不说,仅goto就是一个最大的诟病。
这样写很容易出错,如果我不测试真不知道<0或者>0是会跳到不同的标号的。仅供手头有老程序的童鞋参考。

3 楼

确实是, 这个是很古老的用法. 估计那个代码也比较老.

4 楼

跳转式IF和计算式GOTO都已经被废了:)

可以预见,凡是跟GOTO这种强行跳转相关的东西都会逐渐被抛弃的:)就如READ/WRITE中的END、EOF以及ERR等:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册