You need to enable JavaScript to run this app. 为何C++角度转弧度代码输入20度时输出结果与预期不符
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 05:24:05