为何C++角度转弧度代码输入20度时输出结果与预期不符
代码异常根因排查
你遇到的输出结果偏差是多处类型定义、逻辑写法错误叠加导致的,逐点说明如下:
- 变量类型定义错误
- 圆周率
pi被定义为int整型,赋值的小数值会被直接截断取整为3,完全丧失圆周率的实际计算意义。 - 存储用户输入选项的
degOrRad被定义为int整型,后续拿它和字符'D'做比较时,输入输出流的类型不匹配:用户输入字符'D'会触发cin读取失败,degOrRad的值无法达到预期的比较值(字符'D'的ASCII码为68),直接导致if分支判断失效。 - 所有涉及角度计算、存储的变量都使用
int类型,全局整型变量默认零初始化,这就是输出里度数显示为0的原因。
- 圆周率
- 角度转弧度的公式完全写反
正确的角度转弧度逻辑为 弧度值 = 角度值 × π / 180,你代码里写的转换式是angle = (angle*180)/pi,和正确公式逻辑完全反向。结合pi被截断为3的问题,代入输入值20计算可得:(20 * 180) / 3 = 1200,这就是输出里弧度值为1200的核心来源。 - if分支缺少作用域标记
代码里if (degOrRad == 'D')后面没有加包裹分支逻辑的大括号,按照C++语法规则,if判断只会控制紧跟的第一行代码,后续的转换计算、打印语句不受if约束,无论用户选择什么选项都会无条件执行。 - menu函数的返回值写法无意义
函数里写的return angle, degOrRad;是逗号表达式,只会返回最后一个变量的值,且main函数完全没有接收menu的返回值,这个写法对程序逻辑没有任何帮助。
修正后的核心代码参考
#include <iostream> using namespace std; int precision = 10; // 修正:使用浮点数类型存储圆周率、角度值 double pi = 3.14159265358979323846264338327950288419716; double angle, angleP; // 修正:使用字符类型存储用户输入的D/R选项 char degOrRad; int menu() { cout << endl; cout << "--- Trigonometry Calculator ---" << endl; cout << "Please enter the value of your desired angle => "; cin >> angle; cout << endl; cout << "Is the angle in degree or in radian?" << endl; cout << "Input D if it is in degree," << endl; cout << "Input R if it is in radian. => "; cin >> degOrRad; return 0; } int main() { menu(); // 修正:为if分支加大括号,包裹完整逻辑块 if (degOrRad == 'D') { angleP = angle; // 修正:替换为正确的角度转弧度公式 angle = angle * pi / 180; cout << angleP << " degrees = " << angle << " Radian"; } }
内容的提问来源于stack exchange,提问作者user12681585
相关产品推荐
相关产品推荐

