PIC18F458单片机C语言温度转换表无摄氏度输出问题求助
PIC18F458温度转换表程序修复方案
问题分析
你的代码存在三个核心问题导致摄氏度无输出:
- 计算位置错误:温度转换公式在for循环外执行,此时
fh未初始化,值为随机垃圾值,且循环过程中不会重新计算每个华氏度对应的摄氏度。 - 类型与格式符不匹配:
cel定义为int类型,但printf使用了对应浮点型的%6.1f格式符,类型不匹配直接导致输出异常。 - 整数运算精度丢失:用整数直接计算温度会截断小数部分,既不符合温度转换的精度需求,也和你期望的
%.1f输出格式不匹配。
修正代码
#include <p18f458.h> #include <stdio.h> #pragma config WDT = OFF #define LOWER -250 /* lower limit of table */ #define UPPER 250 /* upper limit */ #define STEP 10 /* step size */ void main(void) { int fh; float cel; // 改用float存储带小数的摄氏度结果 printf("Fahrenheit Celsius\n\n"); // 提前打印表头 for (fh = LOWER; fh <= UPPER; fh = fh + STEP) { cel = (fh - 32.0) * 5.0 / 9.0; // 循环内实时计算当前温度值,用浮点运算保留精度 printf("%d %6.1f\n", fh, cel); // 格式符与变量类型严格匹配 } while(1); }
修改说明
- 把
cel的类型从int改为float,可以存储带小数的摄氏度结果,满足输出精度要求。 - 将温度转换公式移到for循环内部,确保每次循环都根据当前的
fh值重新计算对应的摄氏度。 - 公式中使用
32.0、5.0等浮点常量,强制编译器进行浮点运算,避免整数截断导致的精度丢失。 - 提前打印表头,让输出格式更清晰规整。
- 确保
printf的格式符与变量类型严格对应:%d匹配int类型的fh,%6.1f匹配float类型的cel。
预期输出
修正后运行会显示格式正确的温度转换表,示例如下:
Fahrenheit Celsius -250 -156.7 -240 -151.1 -230 -145.6 ... 250 121.1
内容的提问来源于stack exchange,提问作者Jimmy Kaye Deprease
相关产品推荐
相关产品推荐

