Fortran 读取数据文件时会给出-severe(408)下标大于上限
我试图读取一个四列数据文件。但是,因为我遇到了很多麻烦,所以我只是尝试读取一列整数。这是我的密码:Fortran 读取数据文件时会给出-severe(408)下标大于上限,fortran,Fortran,我试图读取一个四列数据文件。但是,因为我遇到了很多麻烦,所以我只是尝试读取一列整数。这是我的密码: program RFF_Simple implicit none ! Variables character(len = 100):: line_in character(len = :), allocatable :: filename integer, dimension(:), allocatable :: weight,numbers
program RFF_Simple
implicit none
! Variables
character(len = 100):: line_in
character(len = :), allocatable :: filename
integer, dimension(:), allocatable :: weight,numbers
real, dimension(:), allocatable :: fm, fc
integer :: iostat_1, iostat_2
integer :: lun, length, index
! Body of RFF_Simple
! filename = 'data.txt'
filename = 'data_test.txt'
iostat_1 = 0
iostat_2 = 0
length = 0
open(newunit = lun, file = filename, status = 'old', iostat = iostat_1)
!Count how many lines are in the file (length)
if (iostat_1 == 0) then
do while(iostat_2 == 0)
read(lun, '(a)', iostat = iostat_2) line_in
if (iostat_2 == 0) then
length= length + 1
endif
enddo
endif
rewind(lun)
allocate(numbers(length)) !Allocate arrays to have same length as number of lines
iostat_1 = 0 !Reset
iostat_2 = 0
index = 1 !This whole thing is confusing so I don't know whether starting from 1 or 0 is better....
if (iostat_1 == 0) then
do while(iostat_2 == 0)
if(iostat_2 == 0) then
read(lun,*, iostat = iostat_2) numbers(index) !This crashes the program (Severe 408)
index = index + 1
endif
enddo
endif
write(*,*) 'Press Enter to Exit'
read(*,*)
end program RFF_Simple
代码编译没有问题,但运行它会产生以下结果:
是的,那是一个打印屏幕
我甚至不知道从哪里开始 这里的问题是,每次成功读取后,您都会增加
索引。上次成功读取后,我们得到了index=length
。然后将1添加到索引
,然后尝试读取数字(长度+1)
,这将导致边界冲突。您可以使用常规do循环,而不是使用do while
循环,因为我们知道要读取的行数
do index = 1, length
read(lun,*) numbers(index)
enddo
您还可以测试索引
是否大于长度
,并跳出循环。这里的问题是,每次成功读取后,您都会增加索引
。上次成功读取后,我们得到了index=length
。然后将1添加到索引
,然后尝试读取数字(长度+1)
,这将导致边界冲突。您可以使用常规do循环,而不是使用do while
循环,因为我们知道要读取的行数
do index = 1, length
read(lun,*) numbers(index)
enddo
您还可以测试索引
是否大于长度
,然后退出循环。请始终将错误消息复制到您的问题中。这幅画不可接受。错误消息是问题中最重要的内容之一,必须可搜索。您还应该使用实际错误而不是代码更新标题<代码>严重(408)
不显示任何信息。下标比上界大得多。此外,您应该报告您正在使用的编译器,否则错误代码408是完全无用的。请阅读。如果您不知道如何从Windows控制台复制文本,请搜索internet Dude我无法复制文本cmd窗口闪烁一毫秒然后关闭。您是如何完成屏幕截图的?在互联网上搜索如何停止这种闪烁,这是一件非常基本的事情,伙计(提示-在终端插入一个读数,或者从终端开始运行)。你至少可以手工复制主要内容。我在编辑标题时可以做到这一点,你应该自己做。哈哈,协调和快速反应是我获得截图的方式。我将研究如何停止闪烁,这可能是有用的。您有链接吗?请始终将错误消息复制到您的问题中。这幅画不可接受。错误消息是问题中最重要的内容之一,必须可搜索。您还应该使用实际错误而不是代码更新标题<代码>严重(408)不显示任何信息。下标比上界大得多。此外,您应该报告您正在使用的编译器,否则错误代码408是完全无用的。请阅读。如果您不知道如何从Windows控制台复制文本,请搜索internet Dude我无法复制文本cmd窗口闪烁一毫秒然后关闭。您是如何完成屏幕截图的?在互联网上搜索如何停止这种闪烁,这是一件非常基本的事情,伙计(提示-在终端插入一个读数,或者从终端开始运行)。你至少可以手工复制主要内容。我在编辑标题时可以做到这一点,你应该自己做。哈哈,协调和快速反应是我获得截图的方式。我将研究如何停止闪烁,这可能是有用的。你有联系吗?奇怪。你一定是对的。do循环是有效的,但为了我的缘故,我将研究while循环中的索引检查。谢谢,奇怪。你一定是对的。do循环是有效的,但为了我的缘故,我将研究while循环中的索引检查。谢谢