Compiler errors “Fortran”;错误:WRITE语句中应包含表达式;

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

我已经阅读了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)

你能告诉我哪里出错了吗。谢谢大家!

如果你在发帖时很小心,那么:

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年,你是哪一年?