问题描述
我正在做一个非常基本的 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 if
和 end 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)
等。