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

Fortran运行时报Bad integer for item 1 in list input错误如何解决?

错误原因
  • 触发报错的直接原因是读取首个数值的do为无限死循环,无退出条件。程序读完第一个整数60000后,会继续读取文件后续内容尝试赋值给整型变量firstnumber,若后续内容为浮点数,就会直接触发「输入项1不是合法整数」的运行时错误。
  • 除此之外代码还存在多处逻辑错误:读取首行数值后未将后续60000个数值读入arrayone数组,数组全程为空导致后续统计结果无效;遍历循环内反复打开同一文件、使用动态变化的单位号,既冗余也容易触发IO资源冲突;标准差计算公式完全不符合数学定义,计算结果无意义。
修复后的完整代码
implicit none
    
    integer :: i, firstnumber
    real*4 :: average, sum_, standarddeviation, variance
    real*4, allocatable :: arrayone(:)
    
    ! 使用10以上的固定单位号,避免和系统预留单位冲突
    open(unit=10, file="C:\cygwin64\data sets for labs and assignments\Numbers.txt", status="old")
    
    ! 单次读取首个数值即可,不需要循环
    read(10, *) firstnumber
    
    allocate(arrayone(firstnumber))
    
    ! 一次性读取后续所有数值存入数组
    read(10, *) arrayone
    
    close(10)
    
    ! 按数学定义计算统计量
    sum_ = sum(arrayone)
    average = sum_ / firstnumber
    variance = sum( (arrayone - average)**2 ) / firstnumber
    standarddeviation = sqrt(variance)
    
    ! 输出结果
    print*, "Average = ", average
    print*, "Standard Deviation = ", standarddeviation
    
    deallocate(arrayone)
    
    print*, "Done!"
    
end program Assignmentthree
关键修改说明
  • 移除读取首行的无限死循环,单次读取首个整数后直接读取后续数组内容,避免读到非整型内容触发类型错误
  • 分配数组后一次性读取文件后续所有数值存入数组,不需要反复打开文件
  • 修正标准差计算公式,先求所有元素与均值差的平方和,除以样本量得到方差后再开根号得到标准差
  • 统一使用固定的IO单位号,避免单位号冲突导致的IO错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:27:04