Compiler errors “Fortran”;错误:WRITE语句中应包含表达式;
我已经阅读了Fortran指南并尝试了示例程序,在网上查找错误,但似乎没有任何帮助 我的计划如下:Compiler errors “Fortran”;错误:WRITE语句中应包含表达式;,compiler-errors,fortran,gfortran,Compiler Errors,Fortran,Gfortran,我已经阅读了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
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)
你能告诉我哪里出错了吗。谢谢大家! 如果你在发帖时很小心,那么:
write(buff(j), *)(x(j)),
* 'hi '
这是问题的根源。它不是格式正确的固定格式源,也不是格式正确的自由格式源。我建议您确保了解这些表单之间的区别,并遵守自由格式源代码的要求。(如果您使用穿孔卡片为编译器准备源代码,那么固定格式更合适,但这在21世纪相对不常见。)
改变你必须改变的
write(buff(j), *)(x(j)), &
'hi '
在固定格式源代码中,延续字符位于第6列中,该行延续未完成的表达式。您的代码段显然不是固定格式的,因为您的星号位于write
中w
的正下方,但在固定格式中,源语句从第7列开始
在自由格式中,源代码行通过在继续行的末尾添加一个符号(
&
)来继续。可以将“hi”替换为“hi”
帮我解决了一个类似的错误好吧,应该是固定的形式。我试着将星号字符放在第6列,并用第7-72列编写代码的其余部分。它仍然会给出相同的错误!在求值表达式中使用星号,但在WRITE语句中不使用星号。不要编写固定格式源代码,现在是2014年。至少,我坐的是2014年,你是哪一年?