我的程序就像
一样implicit real*8 (a-h,o-z)
parameter (pi=3.141592654)
real*4 yfl
real*4 zz0(20),a0(20),fr0(20)
real*4 par_ion(6)
但我稍后会收到如下错误消息。
data fr0/0.780,0.209,0.009,3*0./ ! fraction by mass for elemen
1
Error: DATA statement at (1) has more variables than values
music-atmosphere-100gev.f:82.10:
data a0/14.0097,15.9994,39.948,3*0./ ! atomic weights for elem
1
Error: DATA statement at (1) has more variables than values
music-atmosphere-100gev.f:81.10:
data zz0/7.,8.,18.,3*0./ ! atomic numbers for elements in atmos
1
Error: DATA statement at (1) has more variables than values
任何人都可以帮我弄清楚这里发生了什么吗?
答案 0 :(得分:3)
这
real*4 zz0(20),a0(20),fr0(20)
您可以看到fr0
,a0
和zz
的维度为20
。所以正确的初始化应该是:
data fr0/0.780,0.209,0.009,17*0./
data a0/14.0097,15.9994,39.948,17*0./
data zz0/7.,8.,18.,17*0./
这样,您可以分配长度为20的数组(三个值和17次零),而不是之前的长度为6的数组。
答案 1 :(得分:2)
当使用data
语句进行显式初始化时,需要两个部分中的元素数(第一个/
之前的变量和两个/
s)之间的值是相同的。
在这种情况下,为每个第一部分给出一个完整的数组,因此每个列表包含相应数组的所有元素(其中有20个)。因此,必须有20个值元素(如Alexander Vogt gives)。
但是,要添加该答案,不要初始化整个数组并不是错误的。可以改为
data fr0(1:6)/0.780,0.209,0.009,3*0./
为fr0
的前六个元素提供显式初始化。 [在这种情况下fr0
作为一个数组最初没有定义,只是它的前六个元素。]当一个人有很长的初始化时,这很有用:
data fr0(1:6)/0.780,0.209,0.009,3*0./
data fr0(7:12)/0.780,0.209,0.009,3*0./
...
等,或者如果一个人真的只关心前六个元素(比如编辑时长度不同,但第一个元素很重要)