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

C语言代码输出异常值1717986918的成因排查求助

问题分析

1. 异常数值1717986918的本质

这个数值是将double类型的25.4(10英寸×2.54厘米/英寸)强制以int类型的二进制格式解析后得到的无意义垃圾值。

2. 导致异常的核心原因

你的代码存在两个关键错误:

  • 格式符与数据类型不匹配:
    inches是int类型,乘以2.54(double常量)后结果为double类型,但你用了%d格式符输出——%d是专门用于输出int类型的格式符,当你把double值传给%d时,编译器会把double的64位二进制表示按int的32位规则读取,从而得到完全不符合预期的数值。

  • printf嵌套调用的逻辑错误:
    你把第二个printf作为第一个printf的参数传入,导致执行顺序和参数传递完全混乱:

    1. 程序会先执行嵌套的printf("or %d centimeters\n", inches*2.54);,此时因为上述类型不匹配问题,先输出了错误的厘米数;
    2. 然后把这个printf的返回值(即成功输出的字符个数)作为第一个printf的参数,而第一个printf的格式字符串需要3个int参数(yards、feet、inches),你并未正确传递,你这里第一个输出恰好正确属于栈临时值巧合匹配的情况。

另外你的代码还有变量名语法错误:inches per foot和feet_per yard包含空格,C语言变量名不允许有空格,正确写法应为inches_per_foot和feet_per_yard。

3. 代码修正方案

拆分嵌套的printf调用,修正类型不匹配问题,同时修复变量名错误,还要注意计算总厘米数时需要用转换后的总英寸数:

#include <stdio.h>

int main()
{
    int inches = 0; 
    int yards = 0;
    int feet = 0;
    const int inches_per_foot = 12; // 修正变量名,移除空格
    const int feet_per_yard = 3;    // 修正变量名,移除空格
    printf("Enter a distance in inches: ");
    scanf("%d", &inches);
    
    feet = inches / inches_per_foot;
    yards = feet / feet_per_yard; 
    feet %= feet_per_yard;
    int remaining_inches = inches % inches_per_foot; // 用单独变量存储剩余英寸,避免覆盖原始计算逻辑
    
    printf("That is equivalent to %d yards %d feet and %d inches.\n", yards, feet, remaining_inches);      
    // 计算总英寸数后再转厘米,用%.2f输出浮点数
    printf("or %.2f centimeters\n", (yards*36 + feet*12 + remaining_inches)*2.54); 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:50:38