回 帖 发 新 帖 刷新版面

主题:请问一下这个程序为什么会出现这种情况?

Module StudMod

Implicit None Integer , Parameter :: INUMBER_OF_COURSE = 6

Type T_Stud Integer :: iStuNumber !//学号 Real :: rScore( INUMBER_OF_COURSE ) !//6门成绩 Real :: rScoreAll , rScoreAvg !//总分和平均分 EndType T_Stud

Contains

Subroutine GetStudInfo( cFilename , stStudArray )

Character( Len = * ) ,Intent( IN ) :: cFilename

Type( T_Stud ) , Intent( OUT) :: stStudArray( : )

Integer :: i

Open( 12 , File = cFilename )

Do i = 1 , size( stStudArray )

Read( 12 , * ) stStudArray( i )%iStuNumber , stStudArray(i)%rScore EndDo

Close( 12 ) EndSubroutine GetStudInfo

Subroutine CalcScore( stStud )

Type( T_Stud ) , Intent( INOUT ) :: stStud

Integer :: i

Real :: rTmp

rTmp = 0.0

Do i = 1 , INUMBER_OF_COURSE

rTmp = rTmp + stStud%rScore( i )

End Do

stStud%rScoreAll = rTmp

stStud%rScoreAvg = rTmp / INUMBER_OF_COURSE

End Subroutine CalcScore

Subroutine OutputInfo( stStud , iNum )

Type( T_Stud ) , Intent( IN ) :: stStud(:)

Integer , Intent( IN ) :: iNum

Write(*,"(i,6f7.1,f9.1,f9.3)") stStud( iNum )%iStuNumber,stStud( iNum )%rScore ,stStud( iNum )%rScoreAll, stStud( iNum )%rScoreAvg

End Subroutine OutputInfo

Subroutine HeapSort( stD , comp_f )

Type ( T_Stud ) , Intent( INOUT ) :: stD( : )

Real , External :: comp_f

Integer i,ir,j,l,n

Type ( T_Stud ) :: stTemp

n = size( stD )

If ( n < 2 ) Return

l = n / 2 + 1 ir= n

Do while( .TRUE. )

If( l > 1 ) then

l = l - 1

stTemp = stD( l )

Else

stTemp = stD( ir)

stD( ir ) = stD( 1 )

ir = ir - 1

If( ir == 1 ) then

stD( 1 ) = stTemp

return

End If

End If

i = l

j = l + l

Do while( j<=ir )

If( ( j < ir ) ) then

If ( comp_f( stD(j) , std(j+1) ) > 0.0 ) then

j = j+1

End If

EndIf

If( comp_f( stTemp , stD(j) ) > 0.0 )then

stD(i) = stD( j )

i = j

j = j + j

Else

j = ir + 1

End If

EndDo

stD( i ) = stTemp

End Do

End Subroutine HeapSort

Real Function comp_f_Score( st1 , st2 )

Type( T_Stud ) , Intent( IN ) :: st1 , st2

comp_f_Score = st1%rScoreAll - st2%rScoreAll

End Function comp_f_Score

End Module StudMod

Program Main

Use StudMod

Implicit None

Integer , Parameter :: INUMBER_OF_STUD = 35 !35个学生 Type( T_Stud ) :: stStuds( INUMBER_OF_STUD ) !定义学生数组结构体 Integer :: i , iCourseNumber 

Call GetStudInfo( "info.dat" , stStuds ) !读入学生信息 Do i = 1 , INUMBER_OF_STUD

Call CalcScore( stStuds(i) ) !计算平均分和总分 End Do

Call HeapSort( stStuds , comp_f_Score ) !排序 Do i = 1 , INUMBER_OF_STUD

Call OutputInfo( stStuds , i ) !输出排序后的学生信息 End Do

Write(*,*) "请输入挑选的课程号(1-6):"

Read(*,*) iCourseNumber

Do i = 1 , 5

If( stStuds(i)%rScore( iCourseNumber ) > 90.0 ) then

Call OutputInfo( stStuds , i ) !输出满足筛选条件的学生信息 End If

End Do

End Program Main
下面是运行时出现的东西

run-time error F6501: READ(info.dat)

- end of file encountered

Press any key to continue

 

回复列表 (共1个回复)

沙发

请检查数据文件格式是否和程序读入部分相匹配。

我来回复

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