Fortran 基本条件和循环代码错误

问题描述

我正在做一个非常基本的 Fortran 教程来为研究生学习它,我输入的条件和循环代码与教程中编写的完全一样,但是当我尝试时,我不断收到“意外的文件结尾”错误用 gfortran 编译。

这是我的条件代码

if (angle < 90.0) then

    print *,'Angle is acute'

else if (angle < 180.0) then

    print *,'Angle is obtuse'

else

    print *,'Angle is reflex'

end if

这是我的循环代码

integer :: i

    do i=1,10,2
    
        print *,i ! print odd numbers
    end do

它们都用结束语句完成,所以我不确定它还想要什么。我今天才刚刚开始自学,所以我仍然只是从教程中逐字复制代码,不知道如何解决任何问题。

解决方法

在本教程中,您所关注的代码片段不是完整的程序。它们不能按原样编译。

您会经常看到这一点,尤其是在本网站的回答中。

显示的代码片段遗漏了很多上下文,以明确要教授的部分。这可能有点不幸,但 Fortran 是一种非常冗长的语言,因此需要权衡清楚。

对于一个完整的程序,您可能已经看到“所有程序都必须有一个结束语句来完成它们”。您可能认为 end ifend do 语句适用于此。它们不是:您需要一个 end program 语句。以下是两个最小的程序:

end

end program

(也有带有 program 语句的表单。)

即:

if (.true.) then
  print *,"Hello,world!"
end if

end program

当且仅当最后一行存在时才可编译。

此外,implicit none 以及变量声明和定义等内容将成为示例片段的隐含上下文的一部分。

,

如果您刚刚学习并想尝试代码,请从以下框架开始

program test
implicit none

<variable declarations>

<program code>

stop
contains

<function definitions>

end program

上述结构对于大多数使用程序(编写一个程序做一件事)来说应该足够了。上面的 stop 不是必需的,它只是让您清楚地看到程序指令实际在哪里结束。


如果您想使用标准数字类型,请包括 iso_fortran_env before implicit none 语句

program test
use,intrinsic :: iso_fortran_env
implicit none

以上将允许您定义 integer(int32)integer(int64)real(real32)real(real64) 等。