如果您是一名 fortran 程序员,您可能见过一个接受 10/15 参数的子例程。如果你仔细想想,这太疯狂了(它们太多了,你冒着交换它们的风险),你很快就会意识到一些争论总是一起传播的。将它们打包在一个单独的实体下是有意义的,该实体将所有东西作为一个整体而不是作为独立实体来承载。这将大大减少参数的数量,只给您找到适当关联的负担。这个单一的实体就是类型。
在您的代码中,您说银行是这些信息的集合。您现在可以声明该类型的具体变量,它将表示并提供对单个变量 acNumber、acChecks 等的访问。为此,您必须使用 % 符号。所以如果你的银行变量被称为b,你可以说例如
b%acNumber = 5
你可以把 b 想象成一个壁橱,里面有不同的架子。你移动封闭,所有的架子和它们的内容一起移动。
数组是一组相同类型的实体(例如,整数或字符(len=1024)或银行),它们一个接一个,因此您可以使用数字索引访问它们中的每一个。请记住,除非另有说明,否则 fortran 中的数组索引从 1 开始(在所有其他主要语言中,第一个索引为零)
至于你的代码,我建议你:
写
INTEGER, DIMENSION(MaxRow:MaxColum) :: AccountData
作为
INTEGER :: AccountData(MaxRow,MaxColum)
它是一样的,但你写的少。另请注意,使用 : 和 , 是有区别的。如果你想定义一个矩阵(你的情况),它是一个二维数组,你必须使用逗号。你写的是错误的。
对于字符串,最好写
CHARACTER :: acType*1, acLName*15, acFName*15
作为
CHARACTER(LEN=1) :: acType
CHARACTER(LEN=15) :: acLName
CHARACTER(LEN=15) :: acFName
在这种情况下,你写得更多,但你的语法已被弃用(不过我可能是错的)另外,请记住,如果你在类型中每行写一个成员变量会更好。这是一个品味问题,但我更喜欢通过每个成员变量一行来查看类型的完整大小。
对于 MaxRows 和 MaxColumns,我会将它们写为 MAX_ROWS 和 MAX_COLUMNS。传统上高度一致的参数和内容在任何主要语言中都以全大写、下划线分隔的名称标识。
编辑:回答您的评论,这是使用数组的示例
$ more foo.f90
program test
integer :: myarray(10)
myarray = 0 ! equivalent to zeroing the single elements one by one
myarray(2) = 5
myarray(7) = 10
print *, myarray
end program
$ g95 foo.f90 -o foo
$ ./foo
0 5 0 0 0 0 10 0 0 0
数组就像多个具有相同名称的变量,由索引标识。对于表示向量或矩阵非常有用。您当然可以做一个您定义的聚合类型的数组,而不是预定义的类型(例如整数)。