【发布时间】:2016-01-25 11:37:29
【问题描述】:
我目前正在处理一些 fortran 代码并遇到错误。
`Duplicate statement label 201 at (1) and (2)`
我的代码很长,但简化后看起来像这样:
integer :: y,x,method
x = 0
print*, "Please enter a value (1 or 2)."
read(*,*) method
if (method .EQ. 1) then
x = 10
do i=1,1000
y = x * i
Call OtherFile(y,x,i)
write(6,201) long,list,of,variables
201 format('OUTPUT: ',i5,1p,7d10.2)
enddo
stop
else if (method .EQ. 2) then
x = 10
do i=1,1000
y = x * i * i
Call OtherFile(y,x,i)
write(6,201) long,list,of,variables,
201 format('OUTPUT: ',i5,1p,7d10.2)
enddo
stop
end if
编辑:在之前发布之后,我意识到这段代码可以工作。我无法发布原始作品,所以我最好尝试重现问题。 Edit2:我错误地将其标记为 Fortran77,它实际上是一个旧版本,因为它是用穿孔卡片格式编写的。
有问题的行是以 201 开头的行。
我可以通过在每个 FORMAT 部分之前分别选择 201 和 202 来解决此问题,但是还有其他文件依赖于参数 201 作为语句编号。
谁能告诉我有没有办法解决这个问题?
【问题讨论】:
-
您的代码没有显示任何标记为
201的格式语句。请查看其中有多少以及它们在哪里/放置在哪里。 [但我可能会感到困惑,因为您似乎希望这些标签指的是文件而不是格式?] -
您可以使您的文件更短,但它必须重现问题!取实际代码,删掉东西,等够短了,还是有问题,贴在这里。不要在这里发布任何不包含问题的代码。阅读stackoverflow.com/help/mcve
-
有点旁白,但由于无论
method是什么,您都点击了相同的write,因此您应该在if块之后使用单个write语句。顺便说一句,您误认为“名为201的文件”。 201是对格式语句的引用,与文件名或单位无关。 -
我在发布代码后意识到缩短的版本可以工作,所以我已经更详细地介绍了并且最好尝试重新创建问题。由于我无法发布原始作品,我意识到我在匆忙尝试解决这个问题时错过了重要部分。
-
如错误消息所述,您有两个标记为
201的语句。这是不允许的。此外,那些标记为201的语句不是有效的格式语句。 (实际上,它们根本不是有效的陈述。)您期望/希望发生什么? [最后一点,除了201问题之外,您根本没有 Fortran 77 代码。]
标签: fortran