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
相关产品推荐
相关产品推荐

