【发布时间】:2016-08-17 16:51:35
【问题描述】:
该程序未成功地尝试使用格式规范中的隐式循环在一行上打印一个数组。它通过显式循环成功地完成了这项工作。
program cycle
implicit none
integer, dimension(5) :: a=(/1,2,3,4,5/), b=(/11,12,13,14,15/)
integer :: n, i
Print *, "Implicit loop"
print "(i0, 1x)", (a(i)*b(i), i=1,n)
Print *, "Explicit loop"
do i=1,n-1
write(*, '(i0, 1x)', advance = "no") a(i)*b(i)
end do
write(*, '(i0)') a(n)*b(n)
end program cycle
结果如下:
Implicit loop
11
24
39
Explicit loop
11 24 39
如何使隐式循环在一行上打印所有内容?甚至可能吗?我尝试插入advance="no",并用各种逗号和括号括起来,但没有奏效。
【问题讨论】:
-
我很惊讶程序会打印任何东西,因为
n从未被赋予值。 -
你的阵列结构伤害了我的眼睛。既然
a从未被修改过,为什么不使用integer, parameter :: a(*)= [1, 2, 3, 4, 5]。 -
n的省略确实是一个错误。这是我在 WIndows 下编译名为 m.exe 的可执行文件的命令行: gfortran mullist2q2.f90 -o m 我的问题:我应该使用任何编译器标志来捕获此类错误吗?您有什么工具可以推荐用于检查 Fortran 源代码吗?
-
jlokimlin,感谢方括号。我正在尝试使用 Fortran 的“现代子集”。我发现 Walter S. Brainerd 的“Fortran 2008 编程指南”是一份有价值但简明的指南。他也显示方括号。我养成了上网找代码的坏习惯。
-
@wander95,在问题中编辑代码时请非常小心。是的,缺少的
n很重要,但是您所做的更改使代码无法编译。虽然您当时没有评论权限,但最好通过请求作者澄清来完成此类事情(如高性能标记的评论)。
标签: arrays printing formatting fortran