2014-01-18 37 views
0

我已经通过了Fortran指南并尝试了示例程序,查找了错误的网络,但似乎没有任何帮助。Fortran“错误:WRITE语句中的预期表达式”

我的程序如下:

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

如果你已经在你的帖子一直小心翼翼那么这个:

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

是问题的根源。它没有正确格式化的固定源,也没有适当地继续自由格式源。我建议你确保你明白这些表单之间的区别,并且符合自由格式源代码的要求。 (当然,如果你是使用穿孔卡来准备你的编译器,然后固定形式是比较合适的,但在21世纪这是比较不寻常的来源。)

改变什么,你必须

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

在固定形式的源文件中的连续字符在第6行中,该行继续未完成的表达式。您的片段显然是不固定的形式,因为你的星号是直接在w下在write但在固定格式源代码声明中第7栏

开始在自由格式源线通过追加与号(&)到被持续该行的结尾仍在继续。

+0

好更换“HI”,它应该是固定的形式。我尝试在第6列中放置星号字符,并在第7-72列中编写其余代码。它仍然继续给出相同的错误! – Dev

+0

将星号用于评估表达式,但对WRITE语句不起作用。 – Dev

+0

不要编写固定源代码,它是2014年。至少,它是2014年,我坐在哪里,和你在哪一年? –

0

可能与“喜”

帮我类似的错误