Не используйте 1
в качестве номера устройства — попробуйте что-то вроде 1234
.! Нижние номера юнитов зарезервированы для «специальных юнитов», таких как STDOUT
, STDERR
, STDIN
. См. также этот пост: ошибка сегментации в linux для ansys
Чтобы проверить, пытаетесь ли вы читать дальше конца файла или неправильного количества столбцов, вы можете поместить iostat=ierror
в свой оператор read
, чтобы проверить, произошла ли ошибка при чтении. ierror<0
соответствует «концу файла», а ierror>0
означает что во время read
произошла ошибка.
Если то, что вы указали для значений матрицы, соответствует файлу matrix.dat
, то вы не читаете первое (целочисленное) значение 3
.
Это для иллюстрации и должно работать:
program a_test
implicit none
real :: a(3,3),b(3)
integer :: dummy, ierror, i, j
open(unit=1234,file='matrix.dat')
read(1234,*) dummy
do i=1,3
read(1234,*,iostat=ierror) b(i),(a(i,j),j=1,3)
if (ierror>0) then
stop 'Error while reading from file. '
elseif (ierror<0) then
stop 'Reached end of file. '
endif
enddo
close(1234)
write(*,*) 'a='
write(*,*) a(1,:)
write(*,*) a(2,:)
write(*,*) a(3,:)
write(*,*) 'b=',b
end
person
Alexander Vogt
schedule
17.10.2013