You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fortran模块子程序无打印输出及未生成data.dat文件问题求助

解决Fortran模块子程序未执行、无输出及数据文件生成问题

问题根源及修正点

  1. 未调用核心子程序
    主程序定义了变量r和n,但从未调用模块中的area子程序,导致子程序内的计算、打印、文件写入逻辑完全没执行——这是最关键的问题。

  2. 变量类型不兼容
    主程序中n是integer类型,但模块内area子程序的形参n被声明为real,类型不匹配会引发编译告警甚至运行错误。

  3. 程序名拼写不一致
    主程序开头是program maths,结尾却写了end program math,名称不统一,虽部分编译器兼容,但需修正为规范写法。

  4. 模块常量声明不严谨
    原代码中pi未用parameter修饰,无法保证其常量属性,需添加parameter关键字确保值不可修改;同时area子程序未被设为public,主程序调用时可能受限。


修正后的完整代码

maths.f90

program maths

use geometry

implicit none

real :: r
integer:: n

r = 20.0
n = 5

print *, 'pi and r', pi, r
! 调用模块中的area子程序,传递输入参数
call area(r, n)
print*, 'area from module (last computed value)', area_calc

end program maths

geometry.f90

module geometry

implicit none 

! 用parameter声明常量pi,确保其值不可修改
double precision, parameter :: pi= 4.*atan(1.)
double precision :: area_calc  ! 模块全局变量,存储计算结果

! 将area子程序设为public,允许主程序调用
public :: area_calc, pi, area

contains

subroutine area(r, n)
   real, intent(in) :: r
   integer, intent(in) :: n  ! 修正n的类型为integer,与主程序变量匹配
   integer :: i

   ! 打开文件时添加status='replace',覆盖已有文件或创建新文件
   open(unit=10, file='data.dat', status='replace')
   do i=1,5
      area_calc = n * pi * r * r * i
      write(10,*) area_calc, i
      print*, 'sequence module', area_calc, i
      write(*,*) 'area within module', area_calc, i
   end do
   close(10)

end subroutine area

end module geometry

编译与运行

使用原Makefile即可正常编译:

  1. 清理旧编译文件:make clean
  2. 编译生成可执行文件:make
  3. 运行程序:./maths

运行后会在终端输出计算过程,同时生成data.dat文件,包含循环中每次计算的area_calc和i值。

内容的提问来源于stack exchange,提问作者SofaScientist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 14:37:48