2016-08-22 3 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 

является вычисляемым идут в заявлении. В таком утверждении есть список меток (здесь только один 202) и целочисленное выражение (здесь iprob), который выбирает метку.

Выбор ярлыка по заказу в списке. Итак, чтобы выбрать первую метку, значение выражения должно быть 1. С iprob, имеющим значение 202, будет выбрана 202-я метка (если она существует). Если целочисленное выражение вне диапазона (меньше 1, больше числа меток в списке), выполнение продолжается до следующей строки. Запуск через goto, как у вас есть.

Возможно, вы полагаете, что назначенный переход относится к операторам, где метка определяется значением выражения. Однако я не буду вдаваться в подробности этого вопроса, поскольку он больше не является частью стандарта Fortran.

+0

Большое спасибо! Это определило проблему. – user92202

+0

Вычисленный GOTO Я всегда находил несколько запутанным. Я знаю, что это fortran77, но SELECTED CASE в fortran90, похоже, стоит посмотреть в этом случае. – Holmz

Смежные вопросы