В вашем коде есть две проблемы:
x = (double)((x*3.14)/180);
(x*3.14)/180
уже является double
, поэтому эта строка эквивалентна:
x = (x*3.14)/180;
, но в любом случае тип x
остается int
, поэтому, если x
было, например, 300
, новые значения x
будут 300 * 3.14/180 = 5.2333
, которые будут обрезаны до 5
.
Вторая проблема здесь:
printf("%.6lf",x);
Как объяснено ранее, тип x
равен int
, но спецификатор формата "%.6lf"
требует double
. Если типы переменных не соответствуют спецификатору формата, поведение не определено.
Вторая версия вашего кода совершенно верна, но помните, что пользователь может вводить только целые значения.
Кстати: 3.14 - очень плохое приближение PI, я уверен, что вы можете сделать лучше.