我有两个一维数组。
我想按如下方式打印内容。
array1:-年龄国家/地区
array2:-a 12中国b 13智利c 14印度
输出
name = a age =12 country = china name = b age =13 country = chile name = c age =14 country = india
答案 0 :(得分:1)
如果设计为使用结构数组而不是数组结构,则此问题可能会更容易。数组方法的结构看起来像
program nml1
implicit none
type info(length)
integer, len :: length
character(20) name(length)
integer age(length)
character(20) country(length)
end type info
type(info(:)), allocatable :: class
namelist /my_data/ class
class = info(3)([character(20)::'a','b','c'],[12,13,14], &
[character(20)::'china','chile','india'])
write(*,nml=my_data)
end program nml1
或者也许
program nml2
implicit none
type info(length)
integer, len :: length
character(20) name(length)
integer age(length)
character(20) country(length)
end type info
type(info(:)), allocatable :: class
namelist /my_data/ class
allocate(info(3)::class)
class%name = [character(20)::'a','b','c']
class%age = [12,13,14]
class%country = [character(20)::'china','chile','india']
write(*,nml=my_data)
end program nml2
但是我似乎无法使用gfortran或ifort来编译它们。我的错还是编译器错误?
但这不是一个大问题,因为无论如何我都会建议使用结构数组的方法。在这种情况下,我们不是在结构中打包了3个标量数据数组(或者只是免费),而是在结构中打包了每个学生的所有相关数据,并创建了这种结构的数组。看起来像这样:
program nml
implicit none
type info
character(20) name
integer age
character(20) country
end type info
type(info), allocatable :: class(:)
namelist /my_data/ class
class = [info('a',12,'china'),info('b',13,'chile'),info('c',14,'india')]
write(*,nml=my_data)
end program nml
现在,这种方法的好处是不仅可以编译,而且可以按照正确的顺序并通过“名称列表” I / O带有标签自动对数据进行反流,因此,如果这种格式足够好,我们就不会这样做。不必编写任何奇特的输出代码。 gfortran的输出为:
&MY_DATA
CLASS(1)%NAME="a ",
CLASS(1)%AGE=12 ,
CLASS(1)%COUNTRY="china ",
CLASS(2)%NAME="b ",
CLASS(2)%AGE=13 ,
CLASS(2)%COUNTRY="chile ",
CLASS(3)%NAME="c ",
CLASS(3)%AGE=14 ,
CLASS(3)%COUNTRY="india ",
/