Почему результат отличается от того, что я ожидал для преобразования степени в радиан?

#c

#c

Вопрос:

Я начну с кода.

 #include <iostream>
using namespace std;

//Set Default Precision
int precision = 10;

int pi = 3.14159265358979323846264338327950288419716;
int angle, degOrRad;
int angleP;

//Menu
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 angle, degOrRad;
}

int main()
{
    menu();

    if (degOrRad == 'D')
        angleP = angle;
        angle = (angle*180)/pi;
        cout <<  angleP << " degrees = " << angle << " Radian";
}
 

Я пытаюсь заставить пользователя ввести угол и сообщить мне, является ли это градусом или радианом, и если это градус, программа преобразует его в радиан.

Однако, когда я запустил программу, введя 20 в качестве угла, а затем выбрав градус, выводит «0 градусов = 1200 радиан».

Есть идеи, где я ошибся?

Заранее спасибо.

Комментарии:

1. return angle, degOrRad; не делает то, что вы хотите. Документация для оператора запятой Рассмотрите возможность возврата a std::pair , вашей собственной структуры, которая объединяет angle и degOrRad , или имеет две функции. Я предпочитаю последнее, поскольку функция должна выполнять одну работу.

2. int pi = 3.14159265358979323846264338327950288419716; эквивалентно int pi = 3;

Ответ №1:

Ваша формула неверна:

Чтобы преобразовать градусы в радианы, его: radians = degrees * pi / 180 .

Ваши переменные имеют неправильный тип:

Любые переменные, которые имеют десятичную составляющую ( pi , angleP , возможно angle , также), должны быть двойными или плавающими, а не целыми числами.

Вводящий в заблуждение отступ

C не использует начальные пробелы (например, python) для блоков кода. Блоки с несколькими операторами должны быть обернуты {} .

 if (degOrRad == 'D') {
    angleP = angle;
    angle = (angle*180)/pi;
    cout <<  angleP << " degrees = " << angle << " Radian";
}
 

Спасибо user4581301 за то, что поймал это!

Комментарии:

1. Блин, я не заметил, что моя формула была неправильной. Спасибо за это. Теперь я получаю правильные значения в радианах. Однако конечный результат по-прежнему указывает 0 градусов (который должен содержать angleP), есть идеи, почему?

2. @drescherjm Спасибо. Это исправлено. Но почему объявление degOrRad как символа исправляет это? Когда это значение int, оно уже запускает цикл if при вводе D, почему вторая строка работает, но не первая? Извините, если я звучу глупо, поскольку я все еще новичок в этом языке.