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

C语言实现三维向量模长计算函数时输出异常问题排查

问题原因

  • 格式符不匹配:find_magnitude 函数返回值为 double 浮点类型,但你在打印结果时使用了仅适用于整型的 %d 格式符,导致浮点数的二进制内容被错误解析为整数,因此输出无意义的异常大值。
  • 可选优化点:当前向量分量定义为 int 类型,传递给 double 形参时虽然会自动隐式转换,但如果需要支持浮点分量输入,建议将分量变量改为 double 类型,对应 scanf 格式符调整为 %lf。另外当前 scanf 格式串 "%d,%d,%d" 要求输入时三个数字用逗号分隔,如果你希望支持空格分隔,可以删除格式串中的逗号。

修正后代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

double find_magnitude(double v1, double v2, double v3);

int main(void) {
    // 改为double类型支持浮点输入
    double v1, v2, v3;
    char a;

    printf("Enter M/m or magnitude or D/d for the dot product and angle in degrees: ");
    scanf("%c", &a);

    if (a == 'M' || a == 'm') {
        printf("Enter in values for v1, v2, and v3: ");
        // 对应double类型使用%lf格式符,这里保留逗号分隔逻辑,如果要支持空格分隔改为"%lf %lf %lf"即可
        scanf("%lf,%lf,%lf", &v1, &v2, &v3);
        // 浮点类型使用%f格式符输出
        printf("%f", find_magnitude(v1, v2, v3));
    }

    return 0;
}

double find_magnitude(double v1, double v2, double v3) {
    double mag;
    mag = sqrt(pow(v1, 2) + pow(v2, 2) + pow(v3, 2));
    return mag;
}

输入1,2,3时,修正后输出为3.741657,和理论计算结果√(1+4+9)=√14一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:09:04