MST
星途 面试题库

面试题:Fortran异常捕获与程序流程控制

假设你正在编写一个Fortran程序读取一个文件内容并进行一系列数值计算。如果在文件读取过程中发生`END - OF - FILE`错误,如何利用异常捕获机制优雅地处理该错误,同时不影响后续可能的其他错误处理逻辑?请给出具体的代码示例,并阐述异常捕获块中的逻辑是如何维护程序状态和控制流程的。
32.1万 热度难度
编程语言Fortran

知识考点

AI 面试

面试题答案

一键面试

在Fortran中,可以使用TRY - CATCH结构来捕获异常。以下是处理文件读取时END - OF - FILE错误的代码示例:

program handle_eof_error
    implicit none
    integer :: unit_num, ierr
    real :: num
    character(len=100) :: filename = 'input.txt'

    open(newunit = unit_num, file = filename, iostat = ierr)
    if (ierr /= 0) then
        print *, 'Error opening file'
        stop
    end if

    do
        try
            read(unit_num, *, iostat = ierr) num
            if (ierr == 0) then
                ! 在这里进行数值计算
                print *, 'Read value:', num
            else if (ierr < 0) then
                exit
            else
                print *, 'Read error'
                exit
            end if
        catch (e)
            if (e%name() == 'EndOfFile') then
                exit
            else
                print *, 'Unexpected error:', e%name()
                stop
            end if
        end try
    end do

    close(unit_num)
end program handle_eof_error

异常捕获块中的逻辑解释

  1. 维护程序状态

    • END - OF - FILE错误发生时(ierr < 0),程序通过exit语句跳出循环,停止文件读取操作,确保不会继续尝试读取文件末尾之后的数据,从而维护了程序的状态。
    • 对于其他非END - OF - FILE异常(通过e%name()判断异常类型),如果是意外错误,打印错误信息并终止程序,防止程序在错误状态下继续执行导致未定义行为。
  2. 控制流程

    • TRY - CATCH结构确保了文件读取过程中的异常能够被捕获。当捕获到异常时,CATCH块内的逻辑会根据异常类型决定程序的走向。
    • 对于END - OF - FILE异常,通过exit跳出循环,结束文件读取,后续可以继续执行关闭文件等清理操作。对于其他异常,程序会打印错误信息并终止,避免异常情况对后续逻辑产生影响,保证了程序控制流程的正确性。