Fortran格式字符串报错求助:非负宽度要求及格式符问题
解决Fortran格式字符串错误问题
错误原因分析
报错指向第41行的Iw.6格式符,核心问题有两个:
- 格式符与输出类型不匹配:你要输出的三个参数都是表头文本(字符串类型),但格式字符串里错误混用了整数格式符
Iw和浮点数格式符F10.2,完全不符合输出内容的类型。 - 无效格式符语法:Fortran中整数格式符
I的宽度必须是具体的非负整数(比如I6),不能用w这类未定义标识符,这直接触发了"Nonnegative width required"错误。
修正方案
把表头行的格式字符串改成适配字符串输出的格式,可选择带宽度的A格式符来对齐表头,或用A/G0自动适配长度。以下是具体修正:
修正后的表头输出语句
! 用带宽度的A格式符对齐表头,可根据需求调整宽度数值 write(*,'(A30, A40, A40)') "Original Price Tag Before Tax", & "Discounted Price After Tax (CAD)", "Discounted Price After Tax (USD)"
如果不需要固定宽度,也可以用更灵活的G0自动适配:
write(*,'(G0, G0, G0)') "Original Price Tag Before Tax", & " Discounted Price After Tax (CAD)", " Discounted Price After Tax (USD)"
完整修正后的代码(仅关键部分修改)
program discount_chart implicit none ! 变量声明和输入校验部分保持不变 ! Print chart header - 修正格式字符串 write(*,'(A30, A40, A40)') "Original Price Tag Before Tax", & "Discounted Price After Tax (CAD)", "Discounted Price After Tax (USD)" ! 计算和输出价格部分保持不变 end program discount_chart
额外注意事项
- 格式符必须和输出变量类型严格对应:字符串用
A/G0,整数用I,浮点数用F/E/G等。 - 给
A格式符指定宽度(如A30)可实现表头对齐,若不需要固定宽度,直接用A即可。 - 你之前尝试的
G0、Iw等格式符无效,是因为没匹配输出内容的类型——表头是纯文本,和整数、浮点数格式符完全不相关。
内容的提问来源于stack exchange,提问作者setupspawn
相关产品推荐
相关产品推荐

