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

PIC18F458单片机C语言温度转换表无摄氏度输出问题求助

PIC18F458温度转换表程序修复方案

问题分析

你的代码存在三个核心问题导致摄氏度无输出:

  1. 计算位置错误:温度转换公式在for循环外执行,此时fh未初始化,值为随机垃圾值,且循环过程中不会重新计算每个华氏度对应的摄氏度。
  2. 类型与格式符不匹配:cel定义为int类型,但printf使用了对应浮点型的%6.1f格式符,类型不匹配直接导致输出异常。
  3. 整数运算精度丢失:用整数直接计算温度会截断小数部分,既不符合温度转换的精度需求,也和你期望的%.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:40:33