我已经阅读了Fortran指南并尝试了示例程序,在网上查找错误,但似乎没有任何帮助。
我的计划如下:
program TYPE_CHECK
character(30), dimension(10) :: buff
integer, dimension(10) :: x
integer :: i
do i=1,10
x(i) = i
enddo
write(*, "(I3)") (x(j), j=1,10)
do j=1,10
write(buff(j), *)(x(j)),
* 'hi '
enddo
do j=1,10
write(*, 776) (buff(j))
776 format(' NO OF ',A20, '=')
enddo
end program TYPE_CHECK
以上应该输出如下:
1
2
3
4
5
6
7
8
9
10
NO OF 1 hi =
NO OF 2 hi =
NO OF 3 hi =
NO OF 4 hi =
NO OF 5 hi =
NO OF 6 hi =
NO OF 7 hi =
NO OF 8 hi =
NO OF 9 hi =
NO OF 10 hi =
但是却出现以下错误:
myfoo2.F:12.30:
write(buff(j), *)(x(j)),
1
Error: Expected expression in WRITE statement at (1)
myfoo2.F:13.7:
* 'hi '
1
Error: Invalid character in name at (1)
你可以告诉我哪里出错了吗?谢谢!
答案 0 :(得分:2)
如果您在发布时一直小心,那么:
write(buff(j), *)(x(j)),
* 'hi '
是问题的根源。它没有正确格式化的固定格式源,也不是正确的自由格式源。我建议你确保你了解这些表格之间的区别是什么,以及你是否符合自由形式来源的要求。 (好吧,如果你使用打孔卡来为编译器准备资源,那么固定格式更合适,但在21世纪相对不常见。)
改变你拥有的东西
write(buff(j), *)(x(j)), &
'hi '
在固定格式的源代码中,延续字符位于第6列的第6行,它继续未完成的表达式。您的代码段显然不是固定格式,因为您的星号位于w
中write
的正下方,但固定格式的源语句位于第7列。
在自由形式的源代码行中,通过在正在继续的行的末尾添加&符号(&
)来继续。
答案 1 :(得分:0)
也许会取代' hi'用" hi"
帮我解决了类似的错误