Fortran 简单读取函数错误

Fortran 简单读取函数错误,fortran,fortran90,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

我想这是我错过的愚蠢的事情,但我问了全班同学,似乎没人能解决。做一个简单的程序调用一个子程序,我在读取矩阵条目的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
它会要求我输入(1,1),但当我输入一个数字时,它不会要求我输入(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

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

来自Fortran 2008标准,10.10.3

如果下一个有效项的类型为complex,则输入表单由左括号和一对有序的数字输入字段组成,这些字段之间用逗号(如果十进制编辑模式为POINT)或分号(如果十进制编辑模式为逗号)分隔,然后是右括号

那么,输入必须类似于您试图读取复数(
A
是复数)!因此,您应该为代码指定复数。。。由于您只提供了一个整数,程序不知道该做什么


提供
(1,0)
(2,0)
而不是
1
2
就可以了

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

    Print *, 'Enter row', i, 'and column', j, 'of matrix A'
    read *, dummy
    A(i,j)=dummy
其中
dummy
被声明为
real
。这将使用户无需输入复数所需的括号。(到复合体的转换是自动的)