Error: Missing comma in a FORMAT statement
Error: Missing comma in a FORMAT statement
我的代码如下:
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 我想。
非常感谢,我刚刚找到了解决方案!
密码是:
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
谢谢。
可以看出,将格式规范替换为
15 FORMAT ('T(',I2,')=',F8.4)
停止编译器抱怨。我现在会更笼统地回答。
格式规范可以由多个格式项组成,其中每个项都是一个编辑描述符或(递归地)带括号的格式项列表。
通常需要用逗号分隔每个格式项。在问题的格式中,编辑描述符是 'T('
、I2
和 ')='
。 [第一个和最后一个是字符串编辑描述符,第二个是数据编辑描述符。]两对之间的逗号都不允许省略。
从 Fortran 2008 标准开始,只有在以下情况下才允许省略逗号:
- 在
P
编辑描述符和紧随其后的 F
、E
、EN
、ES
、D
或 G
编辑描述符,前面可能有重复说明;
- 当可选重复规范未出现时,在斜线编辑描述符之前;
- 在斜线编辑描述符之后;
- 冒号编辑描述符之前或之后。
当然,仅仅因为这样的逗号可以被省略并不意味着它们应该被省略。有一个可选的逗号永远不会有坏处。
此外,正如编译器消息所建议的那样,编译器可能会选择接受逗号的缺失,即使兼容的程序必须有逗号(尽管编译器必须能够检测到此类不兼容)。作为个人陈述,我建议避免这种不规范的写作。
如评论中所述,即使使用更正的格式规范,该程序仍然无效:在首次定义 j
之前有 j=j+3
是不允许的。
我的代码如下:
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 我想。
非常感谢,我刚刚找到了解决方案!
密码是:
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
谢谢。
可以看出,将格式规范替换为
15 FORMAT ('T(',I2,')=',F8.4)
停止编译器抱怨。我现在会更笼统地回答。
格式规范可以由多个格式项组成,其中每个项都是一个编辑描述符或(递归地)带括号的格式项列表。
通常需要用逗号分隔每个格式项。在问题的格式中,编辑描述符是 'T('
、I2
和 ')='
。 [第一个和最后一个是字符串编辑描述符,第二个是数据编辑描述符。]两对之间的逗号都不允许省略。
从 Fortran 2008 标准开始,只有在以下情况下才允许省略逗号:
- 在
P
编辑描述符和紧随其后的F
、E
、EN
、ES
、D
或G
编辑描述符,前面可能有重复说明; - 当可选重复规范未出现时,在斜线编辑描述符之前;
- 在斜线编辑描述符之后;
- 冒号编辑描述符之前或之后。
当然,仅仅因为这样的逗号可以被省略并不意味着它们应该被省略。有一个可选的逗号永远不会有坏处。
此外,正如编译器消息所建议的那样,编译器可能会选择接受逗号的缺失,即使兼容的程序必须有逗号(尽管编译器必须能够检测到此类不兼容)。作为个人陈述,我建议避免这种不规范的写作。
如评论中所述,即使使用更正的格式规范,该程序仍然无效:在首次定义 j
之前有 j=j+3
是不允许的。