ENDDO 中的语句标签与 DO 标签不匹配
Statement label in ENDDO not matching DO label
我写了一个程序来检查一个数是否是质数。
代码如下:
program prime
integer n,i
print *, 'enter a number'
read *,n
do 10,i=2,n-1
if(mod(n,i).eq.0.0) then
print*, 'it is not prime'
read*
stop
end if
continue
if(n.eq.i)print *, 'it is prime'
read *
stop
end do
end program
但是,出现了问题。我收到一个错误:
Error: Statement label in ENDDO doesn't match DO label
本身的错误可以理解,最后的do没有和do循环连接。但是,我无法连接它,因为程序不允许我这样做。这是为什么?
同声明
do 10,i=2,n-1
您正在引入一个标记的 DO 结构。带标签的 DO 构造需要适当的终止语句,以及匹配的标签。在当前的 Fortran 中,匹配的标记 DO 构造以
终止
10 end do
或
10 continue
带标签的 DO 结构在当前 Fortran 中已过时,因此问题的整个 DO 结构可以改写为
do i=2,n-1
...
end do
问题中的缩进非常混乱。 continue
语句可能旨在作为循环的终止,但这不是因为它没有标记为 10
。 continue
只是一个普通的、什么都不做的语句,它仅通过其标签具有作为循环终止的意义。相反,编译器看到循环由 end do
终止,而不管缩进,然后抱怨因为它缺少适当的标签。
循环的逻辑与缩进一致:continue
语句应该是循环的结束。共有三种选择
- 为语句添加标签
10
- 将
continue
更改为 10 end do
- 从 DO 语句中删除
10
并将 continue
更改为 end do
对于每个选项,还删除第二个 end do
。
最后,
if(n.eq.i) ...
在循环之后,该条件是多余的:如果达到 i
将始终具有值 n
。
program prime
integer n,i
print*, 'enter a number'
read*,n
do i=2,n-1
if (mod(n,i)==0.0) then
print*, 'it is not prime'
read*
stop
end if
end do
if (n==i) then
print*, 'it is prime'
read*
endif
end program prime
我写了一个程序来检查一个数是否是质数。
代码如下:
program prime
integer n,i
print *, 'enter a number'
read *,n
do 10,i=2,n-1
if(mod(n,i).eq.0.0) then
print*, 'it is not prime'
read*
stop
end if
continue
if(n.eq.i)print *, 'it is prime'
read *
stop
end do
end program
但是,出现了问题。我收到一个错误:
Error: Statement label in ENDDO doesn't match DO label
本身的错误可以理解,最后的do没有和do循环连接。但是,我无法连接它,因为程序不允许我这样做。这是为什么?
同声明
do 10,i=2,n-1
您正在引入一个标记的 DO 结构。带标签的 DO 构造需要适当的终止语句,以及匹配的标签。在当前的 Fortran 中,匹配的标记 DO 构造以
终止10 end do
或
10 continue
带标签的 DO 结构在当前 Fortran 中已过时,因此问题的整个 DO 结构可以改写为
do i=2,n-1
...
end do
问题中的缩进非常混乱。 continue
语句可能旨在作为循环的终止,但这不是因为它没有标记为 10
。 continue
只是一个普通的、什么都不做的语句,它仅通过其标签具有作为循环终止的意义。相反,编译器看到循环由 end do
终止,而不管缩进,然后抱怨因为它缺少适当的标签。
循环的逻辑与缩进一致:continue
语句应该是循环的结束。共有三种选择
- 为语句添加标签
10
- 将
continue
更改为10 end do
- 从 DO 语句中删除
10
并将continue
更改为end do
对于每个选项,还删除第二个 end do
。
最后,
if(n.eq.i) ...
在循环之后,该条件是多余的:如果达到 i
将始终具有值 n
。
program prime
integer n,i
print*, 'enter a number'
read*,n
do i=2,n-1
if (mod(n,i)==0.0) then
print*, 'it is not prime'
read*
stop
end if
end do
if (n==i) then
print*, 'it is prime'
read*
endif
end program prime