Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran中结合DO和IF的错误_Fortran - Fatal编程技术网

Fortran中结合DO和IF的错误

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调试----------

这是我在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调试------------------
编译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构造被删除(在草稿中).