回 帖 发 新 帖 刷新版面

主题:练习文件读取,不能输出数据

刚刚开始学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
反复检查了,找不到问题所在。

回复列表 (共1个回复)

沙发

6X代表的是6個空格。這樣寫可能一些編譯器OK,但另一些就不一定了。
如果想跳過,建議用T而不是X。

我来回复

您尚未登录,请登录后再回复。点此登录或注册