Fortran计算文件数据均值标准差编译报do while下Unclassifiable statement错误
报错原因及代码问题梳理
直接触发Unclassifiable statement at (1)报错的原因
你写的do while语句不符合Fortran语法要求:Fortran中do while的判断条件必须用括号包裹,你当前的代码写的是do while i < 60000,缺少括号,编译器无法识别这是合法的循环开头,因此将循环内的第一行语句判定为不可分类语句。正确写法应为do while (i < 60000)。
其余存在的语法/逻辑错误
- 函数调用缺少括号:
float firstnumber是非法写法,Fortran中函数传参必须用括号包裹参数,应改为float(firstnumber) print语句语法错误:缺少列表输出标识*和变量分隔符,现有写法print,"Average = "average应改为print *, "Average = ", average,标准差的打印语句同理修改- 循环未闭合:
do while循环没有对应的end do语句,当前代码中循环开启后没有结束标识,编译器会认为后续所有代码都属于循环内的内容,语法和逻辑都不合法 - 读文件逻辑错误:你之前打开的目标文件绑定的单元号是
1,循环内写的read(i,*)会将变量i的值作为文件单元号读取,完全不符合读目标文件的需求;且你给arrayone分配内存后从未给数组赋值就直接计算求和,结果完全是随机无效值 - 变量读取逻辑错误:开头用循环读10次
firstnumber,最终firstnumber只会保留第10次读到的数值,如果你的Numbers1.txt第一行是数组长度,不需要循环读10次,仅读取1次即可 - 标准差计算公式错误:当前公式
sqrt(sum_ - average) * (sum_ - average)逻辑完全错误,标准差需要先计算每个数组元素与平均值差值的平方和,再除以元素个数后开平方,现有公式完全不符合计算规则 - 笔误:
deallocate(arrayone)!Deallocating arrayone}末尾多了多余的右大括号,需要删除
内容的提问来源于stack exchange,提问作者Nik Wrye
相关产品推荐
相关产品推荐

