假设我有一个文件,每行包含一个数组索引,后跟数组值
i array(i)
我可以仅凭天真的read(unit=10, *) i, array(i)
来读取数据吗? Fortran是否会始终先读取i
,然后使用此i
值来分配array(i)
?某些read
规范或编译器标志会影响行为吗?
答案 0 :(得分:3)
数据传输声明
read(unit=10,*) i, array(i)
是合法的,并且其行为符合预期:从记录中首先读取i
的值,然后第二次使用该值来标识数组array(i)
的元素值读取。
这是Fortran规范的要求,例如(Fortran 2018,12.6.4.5.1):
确定要由输入/输出列表项指定哪些实体所需的所有值都在该项目的处理开始时确定。
当然,尽管此数据传输语句可能有效,但这并不意味着它在所有您信任输入数据的最简单的情况下都是可取的。特别是,在此read语句期间不可能对边界进行任何检查。如果读取的i
值对应于无效的数组元素规范,则程序已损坏。您可能只想对数组元素使用中间值,以便处理输入文件中的潜在问题。