2016-08-22 170 views
2

我遇到的Fortran 77码(gfortran编译器), 以下行完美的作品一个奇怪的行为(跳跃标记202为iprob = 202):计算GOTO未能执行

 if(iprob .eq. 202) goto 202 
     !...some commands... 
    202 continue 

然而,其对应:

 GO TO (202), iprob 
     !...some commands... 
    202 continue 

没有。该程序刚刚通过iprob = 202。

也许任何人有关于这个问题的想法?

+0

你是说在计算出来的goto情况下,'iprob'的值是'202',而不是'1'? – francescalus

+0

是的,在两种情况下iprob = 202。我知道这些文档,并且在计算出来的案例中找不到任何错误。因此我感到困惑,为什么失败。可能在其他地方有一个错误,但我迄今没有看到它。 – user92202

+0

我的错误!我误解了命令,因为iprob = 1它会跳转。对不起,我感到困惑 – user92202

回答

3

形式

go to (202), iprob 

是计算goto语句。在这样的语句中有一个标签列表(这里只是一个202)和一个整数表达式(这里是iprob),它选择标签。

标签选择按列表中的顺序排列。所以,要选择第一个标签,表达式的值应该是1iprob的值为202将选择第202个标签(如果存在)。如果整数表达式超出范围(小于1,超过列表中标签的数量),则继续执行下一行。像你一样穿过goto。

您可能正在考虑分配转到语句,其中标签由表达式的值决定。但我不会详细讨论这个细节,因为它不再是Fortran标准的一部分。

+0

非常感谢!这解决了这个问题。 – user92202

+0

计算的GOTO我总是发现有些混乱。我知道这是fortran77,但fortran90中的SELECTED CASE似乎值得在这种情况下看待。 – Holmz