2016-08-22 4 views
2

begegne ich ein seltsames Verhalten in Fortran 77 Code (gfortran Compiler) ausführen fehlschlägt, die folgende Zeile perfekt funktioniert (Springen für iprob zu beschriften 202 = 202):Computed GOTO

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

jedoch sein Gegenstück :

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

nicht. Das Programm läuft gerade für iprob = 202 durch.

Vielleicht hat jemand eine Idee zu diesem Thema?

+0

Willst du damit sagen, dass "iprob" im berechneten goto-Fall den Wert '202' hat, nicht' 1'? – francescalus

+0

Ja, iprob = 202 in beiden Fällen. Ich kenne die Dokumentation und kann im berechneten Fall nichts falsch finden. So bin ich verwirrt, warum es scheitert. Möglicherweise gibt es einen Fehler woanders, aber ich habe es bisher nicht gesehen. – user92202

+0

Mein Fehler! Ich habe den Befehl missverstanden, für iprob = 1 springt er. Sorry für die Verwirrung – user92202

Antwort

3

Die Form

go to (202), iprob 

ist eine berechnete Sprunganweisung. In einer solchen Anweisung gibt es eine Liste von Bezeichnungen (hier nur die eine 202) und einen ganzzahligen Ausdruck (hier iprob), der die Bezeichnung auswählt.

Die Etikettenauswahl erfolgt in der Reihenfolge in der Liste. Um das erste Etikett auszuwählen, sollte der Wert des Ausdrucks 1 lauten. Mit iprob mit dem Wert 202 würde das 202. Etikett (wenn es existiert) ausgewählt werden. Wenn der Integer-Ausdruck außerhalb des Bereichs liegt (weniger als 1, mehr als die Anzahl der Beschriftungen in der Liste), wird die Ausführung in der nächsten Zeile fortgesetzt. Durch den Goto laufen, wie du es hast.

Sie denken möglicherweise an zugewiesene Anweisungen go to, bei denen die Bezeichnung durch den Wert eines Ausdrucks bestimmt wird. Ich werde jedoch nicht näher darauf eingehen, da es nicht mehr Teil des Fortran-Standards ist.

+0

Vielen Dank! Das hat das Problem behoben. – user92202

+0

Das berechnete GOTO fand ich immer etwas verwirrend. Ich weiß, dass dies Fortran77 ist, aber der SELECTED CASE in Fortran90 scheint in diesem Fall einen Blick wert. – Holmz