我想用一個函數編寫一個程序,該函數返回一個矩陣,其中包含對角線上的隨機數,子對角線上的1和其他地方的0。所以,我寫了這個功能:錯誤:Fortran中的兩個主程序
real function am1d
do i=1,L
do j=1,L
if (i.eq.j) then
am1d(i,j)=rand()*w-w/2.
elseif ((i-j.eq.1) .or. (j-i.eq.1)) then
am1d(i,j)=1
else am1d(i,j)=0
enddo
enddo
end function am1d
並試圖從這裏調用它(相同的源文件中,只是上面的功能)
program make3d
integer, parameter :: L = 20
real, parameter :: w = 0.5
real :: x
!x=rand(1234) ! seed random manually
x=rand(itime) ! seed random from current local time
print *,am1d()(:)
end program make3d
但是,試圖編譯,這將引發錯誤:
$ f95 make3d.f
make3d.f:18.21:
print *,am1d()(:)
1
Error: Syntax error in PRINT statement at (1)
make3d.f:7.72:
program make3d
1
make3d.f:24.72:
real function am1d
2
Error: Two main PROGRAMs at (1) and (2)
這是什麼意思?我不認爲一個功能可以成爲一個程序?我之前在endprogram語句下有小邏輯函數,沒有任何問題。
因爲你寫了'print *'而不是'print *',所以拋出了print中的語法錯誤。而不是聲明函數輸出的形狀也是錯誤的。 但編譯器拋出的第二個錯誤將被忽略,因爲它可能是由第一個錯誤(級聯)引起的。 – 2017-02-06 12:13:18