Fortran 简单读取函数错误
我想这是我错过的愚蠢的事情,但我问了全班同学,似乎没人能解决。做一个简单的程序调用一个子程序,我在读取矩阵条目的do循环时遇到了麻烦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
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
。这将使用户无需输入复数所需的括号。(到复合体的转换是自动的)