错误:FORMAT语句中缺少逗号

问题描述 投票:1回答:2

我的代码如下:

DIMENSION T(10)
DATA A,B /9.,5./
IS=1
J=J+3
T(j-2)=A
T(J-1)=A-B
80 T(J)=T(1)+T(J-1)
J=J+1
IF(J.NE.10) GOTO 80
DO I=1,5
WRITE (*,15) I, T(J)
END DO
15 FORMAT ('T('I2')=', F8.4)
STOP
END

我的编译错误如下:

jdoodle.f95:13:16:

 15 FORMAT ('T('IS')=', F8.4)
                1
Error: GNU Extension: Missing comma at (1)
jdoodle.f95:11:20:

 WRITE (*,15) I, T(J)
                    1
Error: FORMAT label 15 at (1) not defined

你能否告诉我Fortran代码的错误陈述在哪里?我认为结果必须是T(1)= nnn.0nnn。

fortran gfortran fortran77
2个回答
0
投票

非常感谢,我刚刚找到了解决方案!

代码是:

DIMENSION T(10)
DATA A,B /9.,5./
IS=1
J=J+3
T(J-2)=A
T(J-1)=A-B
80 T(J)=T(1)+T(J-1)
J=J+1
IF(J.NE.10) GOTO 80
DO I=1,5
WRITE (*,15) I, T(I)
END DO
15 FORMAT ('T(',I2,')=',F8.4)
STOP
END    

结果是:

T( 1)=  9.0000
T( 2)=  4.0000
T( 3)= 13.0000
T( 4)= 22.0000
T( 5)= 31.0000

谢谢。


0
投票

可以看出,用格式规范替换

15 FORMAT ('T(',I2,')=',F8.4)

停止编译器抱怨。我现在会更一般地回答。

格式规范可以由多个格式项组成,其中每个项是编辑描述符或(递归地)带括号的格式项列表。

通常需要用逗号分隔每个格式项。在问题的格式中,编辑描述符是'T('I2')='。 [第一个和最后一个是字符串编辑描述符,第二个是数据编辑描述符。]两个对之间的逗号都不允许被省略。

根据Fortran 2008标准,仅在以下情况下才允许使用逗号:

  • P编辑描述符和紧随其后的FEENESDG编辑描述符之间,可能在重复规范之前;
  • 在没有出现可选的重复规范时,在斜杠编辑描述符之前;
  • 在斜杠编辑描述符之后;
  • 在冒号编辑描述符之前或之后。

当然,仅仅因为这些逗号可能被省略,并不意味着它们应该被删除。有一个可选的逗号存在永远不会伤害。

此外,正如编译器消息所建议的那样,即使兼容程序必须具有逗号,编译器也可以选择接受逗号的缺失(尽管编译器必须能够检测到这种不合规)。作为个人陈述,我建议避免这种非标准写作。


正如在评论中已经指出的那样,即使使用更正的格式规范,程序仍然无效:不允许在j=j+3首次定义之前使用j

© www.soinside.com 2019 - 2024. All rights reserved.