简单的读取功能错误

时间:2015-05-06 17:27:52

标签: fortran fortran90

我想这是一个愚蠢的事情,我已经错过了,但我已经问过全班同学,没有人能够解决这个问题。在子程序中调用一个简单的程序,并且我在矩阵的条目中读取do循环有问题。

program Householder_Program

use QR_Factorisation
use numeric_kinds

complex(dp), dimension(:,:), allocatable :: A, Q, R, V
integer :: i, j, n, m

print *, 'Enter how many rows in the matrix A'
read *, m

print *, 'Enter how many columns in the matrix A'
read *, n

allocate(A(m,n), Q(m,n), R(n,n), V(n,n))

do i = 1,m

    do j = 1,n

        Print *, 'Enter row', i, 'and column', j, 'of matrix A'
        read *, A(i,j)

    end do

end do

call Householder_Triangularization(A,V,R,n,m)

print *, R

end program

它会问我A(1,1)但是当我输入一个数字时它不会问我A(1,2),它会留下一个空白行。当我尝试输入第二个数字时,它会出错并说:

 Enter row           1 and column           1 of matrix A
 1
 2
 At line 22 of file HouseholderProgram.f90 (unit = 5, file = 'stdin')
 Fortran runtime error: Bad repeat count in item 1 of list input

3 个答案:

答案 0 :(得分:4)

您的变量A是类型为complex的(数组)。这意味着当您尝试执行元素值的列表定向输入时,您不能只指定一个数字。因此,在您的情况下,问题不在于程序,而在于输入。

来自Fortran 2008标准,10.10.3

  

当下一个有效项的类型为complex时,输入表单由左括号后跟一个有序的数字输入字段对,用逗号分隔(如果十进制编辑模式为POINT)或分号(如果是十进制编辑)模式是COMMA),然后是右括号。

输入必须类似于(1., 12.)

答案 1 :(得分:3)

您正在尝试阅读复杂的数字(A很复杂)!因此,您应该为代码指定复数...由于您只提供一个整数,程序不知道该怎么做。

提供(1,0)(2,0)代替12即可。

答案 2 :(得分:2)

如果用户输入始终是真实的,并且您想将其读入复杂类型数组,则可以执行以下操作:

    Print *, 'Enter row', i, 'and column', j, 'of matrix A'
    read *, dummy
    A(i,j)=dummy

其中dummy被声明为real。这将使用户无需键入复数所需的括号。 (转换为复合体是自动的)