Fortran"错误:WRITE语句中的预期表达式"

时间:2014-01-18 06:28:29

标签: 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 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)
你可以告诉我哪里出错了吗?谢谢!

2 个答案:

答案 0 :(得分:2)

如果您在发布时一直小心,那么:

write(buff(j), *)(x(j)),
*   'hi '

是问题的根源。它没有正确格式化的固定格式源,也不是正确的自由格式源。我建议你确保你了解这些表格之间的区别是什么,以及你是否符合自由形式来源的要求。 (好吧,如果你使用打孔卡来为编译器准备资源,那么固定格式更合适,但在21世纪相对不常见。)

改变你拥有的东西

write(buff(j), *)(x(j)), &
   'hi '

在固定格式的源代码中,延续字符位于第6列的第6行,它继续未完成的表达式。您的代码段显然不是固定格式,因为您的星号位于wwrite的正下方,但固定格式的源语句位于第7列。

在自由形式的源代码行中,通过在正在继续的行的末尾添加&符号(&)来继续。

答案 1 :(得分:0)

也许会取代' hi'用" hi"

帮我解决了类似的错误