我正在用Brian Hahn的《 Fortran 90 for Scientists and Engineers 》(Fortran 90版)学习Fortran。在第131/132页有关数组的第9章中,他给出了以下代码作为动态数组的示例
Program Chap_9_Allocatable_Array
Implicit none
! Variables
Real, dimension(:), Allocatable :: X, OldX
Real A
Integer IO, N, i
! Body of Chap_9_Allocatable_Array
Allocate( X(0) ) !Size zero to sart with?
N = 0
Open(1, File = 'Data.txt')
Do
Read(1, *, IOStat = IO) A
If (IO < 0) Exit
N = N + 1
Allocate( OldX( Size(X) ) )
OldX = X !Entire array can be assigned
Deallocate( X )
Allocate( X(N) )
X = OldX
X(N) = A
Deallocate( OldX )
End do
Print *, (X(i), i = 1, N)
End program Chap_9_Allocatable_Array
我已使用Intel Visual Fortran编译器在Visual Studio Community 2019中实现了此程序。他解释说,该计划的目的是
以下程序摘录显示了如何使用可分配数组来调用这些野兽,以读取未知数量的数据,不幸的是,由于READ的工作方式,每行必须提供一项
我发现了一个有趣的错误。文件data.txt由100个随机数组成,每行1个。当我尝试运行它时,它似乎停滞了几秒钟,然后控制台只打印了
按任意键继续。
提示,没有错误消息。我已插入一些调试打印文件,并确定程序在停止之前运行do循环3至8次。我无法确定原因。如果然后将data.txt文件更改为仅3个数字长,则程序将按预期运行。通过调试打印,我将错误固定为
Deallocate( X )
行。如果我在Visual Studio中调试程序,则只会收到以下消息:
Chap_9_Allocatable_Array.exe触发了一个断点。
这本书有一些小错误。仅在此示例中,作者似乎忘记了声明 i ,这导致了编译错误。但是,由于我只是想了解数组,因此我不知道还要尝试什么。有什么想法吗?