Fortran中结合DO和IF的错误
这是我在Visual FORTRAN 6.6A中编写的代码的一部分:Fortran中结合DO和IF的错误,fortran,Fortran,这是我在Visual FORTRAN 6.6A中编写的代码的一部分: . . . DO 24 I=1,80 24 IF ((NODNUM(1) .EQ. I) .AND. (CAUCHY(3,2) .LT. CTI(I+12))) THEN ARRAY(1)=C1*0.99 END IF . . . 当我编译它时会发生这个错误: *--------------------配置:ovl30u\U moon1-Win32调试----------
.
.
.
DO 24 I=1,80
24 IF ((NODNUM(1) .EQ. I) .AND. (CAUCHY(3,2) .LT. CTI(I+12))) THEN
ARRAY(1)=C1*0.99
END IF
.
.
.
当我编译它时会发生这个错误:
*--------------------配置:ovl30u\U moon1-Win32调试------------------编译Fortran…
C:\Documents and Settings\XPMUser\Desktop\ovl30u\u moon1.f C:\Documents and Settings\XPMUser\Desktop\ovl30u\u moon1.f(567):错误:这不是DO构造的有效终止语句 24如果((NODNUM(1)、等式I)和(CAUCHY(3,2)、LT.CTI(I+12)),则
---^ C:\Documents and Settings\XPMUser\Desktop\ovl30u\u moon1.f(569):错误:发生ENDIF时没有相应的IF-THEN或ELSE语句。
如果
-----------^ 执行df.exe时出错。
ovl30u_moon1.obj-2个错误,0个警告* 我也尝试了此操作,但仍存在错误:
DO 24 I=1,80
24 IF ((NODNUM(1) .EQ. I) .AND. (CAUCHY(3,2) .LT. CTI(I+12))) THEN
ARRAY(1)=C1*0.99
END IF
END DO
感谢您的建议。使用标签终止do循环的方式无效。对于FORTRAN 77,请使用:
DO 24 I=1,80
IF ((NODNUM(1) .EQ. I) .AND. (CAUCHY(3,2) .LT. CTI(I+12))) THEN
ARRAY(1)=C1*0.99
END IF
24 CONTINUE
在Fortran 90+中,您可以省去标签:
DO I=1,80
IF ((NODNUM(1) .EQ. I) .AND. (CAUCHY(3,2) .LT. CTI(I+12))) THEN
ARRAY(1)=C1*0.99
END IF
END DO
或者,如果您依赖于标签,您可以使用
label: DO I=1,80
IF ((NODNUM(1) .EQ. I) .AND. (CAUCHY(3,2) .LT. CTI(I+12))) THEN
ARRAY(1)=C1*0.99
END IF
END DO label
此外,还有另一种方法可以重述你的具体情况
虽然不允许使用if
构造作为非块(带标签的)do
的终止,但可以使用if
语句:
DO 24 I=1,80
24 IF ((NODNUM(1) .EQ. I) .AND. (CAUCHY(3,2) .LT. CTI(I+12))) ARRAY(1)=C1*0.99
可以,但确实不应该:使用块构造,就像在另一个anwer中一样
有关更多详细信息,请参阅Fortran 2008 8.1.6.3和R214。感谢您的回答。我已尝试改进编译器输出的格式,但我不得不猜测一下。如果它不太正确,我很抱歉,但请更正。仅供参考-当前的草稿将此作为一个选项删除,因此可能应该是“你可以,但你真的、真的、真的不应该…”。我最初以为你是指作为动作终止的If语句,但似乎你是指整个非块do构造被删除(在草稿中).