主题:练习文件读取,不能输出数据
刚刚开始学fortran,现在一边看书一边练习彭国伦的《Fortran95程序设计》。
在练习文件的顺序读取时,这个程序不能输出,代码如下:
!%%
!%%顺序读取文件%%
!%%使用exam0906生成的data.txt文件作为输入文件%%
module typedef
type student
integer Chinese, English, Math
end type
end module
program exam0906
use typedef
implicit none
type(student) :: s
character(len=80) :: filename
integer,parameter :: fileid=10
logical alive
integer :: error
integer :: no
100 write(*,*) "请输入文件名:"
read(*,"(A80)") filename
inquire(file=filename,exist=alive)
if(.not. alive) then
write(*,*) "文件",trim(filename),"不存在。"
goto 100
end if
!%%以下代码出错,不能输出,但是找不到问题所在%%
open(fileid,file=filename)
do while(.true.)
read(fileid,"(6XI2,/,6XI3,8XI3,8XI3)",iostat=error) no,s !%%跳过每个字段相应的字符数
if(error/=0) exit
write(*,"(I2'号:中文'I3',英文'I3',数学'I3)") no,s
end do
close(fileid)
end
这个是生成data.txt文件的exam0906程序代码:
!
!%%提示用户输入数据,然后将数据输出到文件data.txt中%%
!
!%%自定义数据类型student%%
module typedef
type student
integer Chinese, English, Math
end type
end module
program exam0907
use typedef
implicit none
integer :: students
type(student), allocatable :: s(:)
character(len=80) :: filename="data.txt"
integer, parameter :: fileid=10
integer :: i
write(*,*) "班上有多少学生?"
read(*,*) students
allocate(s(students),stat=i)
if(i/=0) then
write(*,*) " Allocatble buffer fail."
endif
open(fileid,file=filename)
do i=1, students
write(*,"('请输入'I2'号同学的中文、英文、数学成绩')") i
read(*,*) s(i)%Chinese, s(i)%English, S(i)%Math
write(fileid,"('座号:'I2/'中文:'I3',英文:'I3',数学:'I3)") &
i, s(i) !%%输出的字符串均为全角,第一个字段占据6字符,其他占据8个字符
enddo
close(fileid)
end
反复检查了,找不到问题所在。
在练习文件的顺序读取时,这个程序不能输出,代码如下:
!%%
!%%顺序读取文件%%
!%%使用exam0906生成的data.txt文件作为输入文件%%
module typedef
type student
integer Chinese, English, Math
end type
end module
program exam0906
use typedef
implicit none
type(student) :: s
character(len=80) :: filename
integer,parameter :: fileid=10
logical alive
integer :: error
integer :: no
100 write(*,*) "请输入文件名:"
read(*,"(A80)") filename
inquire(file=filename,exist=alive)
if(.not. alive) then
write(*,*) "文件",trim(filename),"不存在。"
goto 100
end if
!%%以下代码出错,不能输出,但是找不到问题所在%%
open(fileid,file=filename)
do while(.true.)
read(fileid,"(6XI2,/,6XI3,8XI3,8XI3)",iostat=error) no,s !%%跳过每个字段相应的字符数
if(error/=0) exit
write(*,"(I2'号:中文'I3',英文'I3',数学'I3)") no,s
end do
close(fileid)
end
这个是生成data.txt文件的exam0906程序代码:
!
!%%提示用户输入数据,然后将数据输出到文件data.txt中%%
!
!%%自定义数据类型student%%
module typedef
type student
integer Chinese, English, Math
end type
end module
program exam0907
use typedef
implicit none
integer :: students
type(student), allocatable :: s(:)
character(len=80) :: filename="data.txt"
integer, parameter :: fileid=10
integer :: i
write(*,*) "班上有多少学生?"
read(*,*) students
allocate(s(students),stat=i)
if(i/=0) then
write(*,*) " Allocatble buffer fail."
endif
open(fileid,file=filename)
do i=1, students
write(*,"('请输入'I2'号同学的中文、英文、数学成绩')") i
read(*,*) s(i)%Chinese, s(i)%English, S(i)%Math
write(fileid,"('座号:'I2/'中文:'I3',英文:'I3',数学:'I3)") &
i, s(i) !%%输出的字符串均为全角,第一个字段占据6字符,其他占据8个字符
enddo
close(fileid)
end
反复检查了,找不到问题所在。