2016-04-19 19 views
1

エラーチェックのためにフラグfを使用しています。 Fortran(またはおそらくgfortran)は、私が別の検査をしたいときにその値を再割り当てさせません。"名前付き定数に割り当てることができません"(変数の再割り当て)

integer, dimension(:,:), allocatable :: A 
integer :: f, n   

write (*, *) "Give an integer n > 0. n = " 

    read (*, IOSTAT=f) n 

    do while(f /= 0) 
     print *, "Error with input. Please try again." 
     read (*, IOSTAT=f) n 
    end do 

    write (*, "(a, i5)") "You have entered n = ", n 

    allocate(A(n), STAT=f) 
    if (f /= 0) 
     print *, "Error: not enough memory for A." 
    end if 

注意:コピー貼り付けでスペーシングが崩れている可能性があります。

fは、整数として宣言されています(パラメータ整数ではありません)。integer :: f

私は非常にFortranの初心者ですので、考えられない間違いを犯した可能性が非常に高いです!

+0

'allocate(A(n)) 'と言うとエラーがありますか?それは 'allocate(A(n、n))'であるべきですか? – jamesh625

+0

この奇妙なエラーメッセージはgfortranの既知のバグです:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34325 – agentp

答えて

2

このエラーメッセージは紛らわしいですが、問題は

if (f /= 0) 
     print *, "Error: not enough memory for A." 
    end if 

これは動作するようです

if (f /= 0) then 
     print *, "Error: not enough memory for A." 
    end if 
0
implicit none 
    integer :: f, n 
    integer, dimension(:,:), allocatable :: A 


    write (*, *) "Give an integer n > 0. n = " 
    read (*, *, IOSTAT=f) n 

    do while (f /= 0) 
     print *, "Error with input. Please try again." 
     read (*, IOSTAT=f) n 
    end do 

    write (*, "(a, i5)") "You have entered n = ", n 

    allocate(A(n,n), STAT=f) 
    if (f /= 0) then 
     print *, "Error: not enough memory for A." 
     !exit program. How do I do this? 
    end if 

でなければならないことです。

(1)Vladimir Fが指摘したように、Fortranはif (<condition>) then <stuff> endifを望んでいました。

(2)上記のコメントで述べたように、私はallocate(A(n,n), STAT=f)と書いておくべきです。

ありがとうございました!この答えは完全なものです。実際にこの質問に答えたのはウラジミールです。

関連する問題