You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fortran素数判断程序出现ENDDO与DO标签不匹配错误是什么原因?

报错根本原因

你混用了Fortran两种DO循环的语法规则:

  • 你写的do 10,i=2,n-1是带标签的旧式DO循环语法,这种语法要求循环的结束位置必须绑定编号为10的语句标签,不能用普通的end do闭合。
  • 你代码最后用end do来闭合循环,是现代无标签DO循环的写法,这种写法要求do后面不能加语句标签,两种语法混写就触发了标签不匹配的报错。

除此之外你的代码还有两处逻辑问题:

  • 无标签的continue语句没有实际作用,还把素数判断、停止程序的逻辑写到了循环体内,导致循环最多执行一次就会终止
  • mod(n,i)返回结果为整数,和浮点数0.0比较会有隐式类型转换的隐患,建议直接和整数0比较

两种修复方案

方案1:改用无标签的现代Fortran语法(推荐)

program prime
integer n,i
print *, 'enter a number'
read *,n
do i=2,n-1
    if(mod(n,i).eq.0) then
        print*, 'it is not prime'
        read*
        stop
    end if
end do
! 循环正常结束说明没有找到因数,直接输出即可
print *, 'it is prime'
read *
stop
end program

方案2:保留带标签的旧式语法

program prime
integer n,i
print *, 'enter a number'
read *,n
do 10,i=2,n-1
    if(mod(n,i).eq.0) then
        print*, 'it is not prime'
        read*
        stop
    end if
10 continue ! 这里加对应标签10,作为循环结束标识
print *, 'it is prime'
read *
stop
end program

内容的提问来源于stack exchange,提问作者Jon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:27:06