Завершил работу с кодом 0

#include <stdio.h>
#include <locale.h>
#include <math.h>
void gradus(double hours, double minutes) {
    if (hours > 11) {
        hours = hours - 12; //перевод в 12-ти часовой формат
    }
    double all_minutes = hours * 60 + minutes; //общее количество минут
    double hour_hand_in_degrees, minute_hand_in_degrees;
    hour_hand_in_degrees = all_minutes * 0.5; //считаем градусы, 1 минута=0.5гр
    minute_hand_in_degrees = minutes * 6; //минуты в градусах
    double modul = abs(hour_hand_in_degrees - minute_hand_in_degrees);
    double final_time = 0; // время в секундах
    while ((modul > 45.4) || (modul < 44.5)) {
        hour_hand_in_degrees += 0.0083; //градусы часовой стрелки в секунду
        minute_hand_in_degrees += 0.1; //градусы минутной стрелки в секунду
        modul = abs(hour_hand_in_degrees - minute_hand_in_degrees);
        if (modul > 360) {
            modul -= 360;
        }
        final_time += 1; //шаг в одну секунду
    }
    printf("Через %f минут\n", final_time / 60); //перевод в минуты
}

int main(double hours, double minutes) {
    gradus(hours, minutes);
    setlocale(LC_ALL, "RUS");
    printf("Введите часы: ");
    scanf_s("%lf", &hours);
    printf("Введите минуты: ");
    scanf_s("%lf", &minutes);
}

Еще и символы какие-то выводятся, число непонятное...

Изначально программа была написана с использованием только одной функции main, но требуется всю смысловую часть заключить в отдельную функцию, а ввод, вывод и вызов функции уже в main. Так я и сделал, но теперь после ввода значений программа ничего не выводит, а выводит код 0, ну и какие-то символы и непонятное число. Изначальный код выглядел так и работал исправно:

#include <stdio.h>
#include <locale.h>
#include <math.h>
int main() {
    setlocale(LC_ALL, "RUS");
    double hours, minutes;
    printf("Введите часы: ");
    scanf_s("%lf", &hours);
    printf("Введите минуты: ");
    scanf_s("%lf", &minutes);
    if (hours > 11) {
        hours = hours - 12; //перевод в 12-ти часовой формат
    }
    double all_minutes = hours * 60 + minutes; //общее количество минут
    double hour_hand_in_degrees, minute_hand_in_degrees;
    hour_hand_in_degrees = all_minutes * 0.5; //считаем градусы, 1 минута=0.5гр
    minute_hand_in_degrees = minutes * 6; //минуты в градусах
    double modul = abs(hour_hand_in_degrees - minute_hand_in_degrees);
    double final_time = 0; // время в секундах
    while ((modul > 45.4) || (modul < 44.5)) {
        hour_hand_in_degrees += 0.0083; //градусы часовой стрелки в секунду
        minute_hand_in_degrees += 0.1; //градусы минутной стрелки в секунду
        modul = abs(hour_hand_in_degrees - minute_hand_in_degrees);
        if (modul > 360) {
            modul -= 360;
        }
        final_time += 1; //шаг в одну секунду
    }
    printf("Через %f минут\n", final_time / 60); //перевод в минуты
    return 0;
}

введите сюда описание изображения

Программа принимает значения часов и минут и вычисляет, через какое время угол между стрелками составит 45 градусов.


Ответы (1 шт):

Автор решения: Harry

1-й ужас — int main(double hours, double minutes) {

Сигнатура main только int main() или int main(int, char**). Никаких double.

Так что как оно вообще скомпилировалось — непонятно. И что туда передано. Вы бы сами интереса для вывели эти значения на консоль и посмотрели...

Ну и ужас 2 -- вы сначала что-то вычисляете, а потом уже вводите данные. Вот и получаете какой-то странный вывод в первой строке (см. внимательно!), а потом, после ввода данные у вас же программа просто заканчивается...

Кракозябры у вас потому, что вы сначала вызываете функцию, и только после того, как она выводит свой вывод на консоль, определяете локаль.

gradus(hours, minutes);
setlocale(LC_ALL, "RUS");

Словом, продемонстрировано полное непонимание, из которого заключаю, что первоначальный код писали не вы...

int main() {
    double hours, minutes;
    setlocale(LC_ALL, "RUS");
    printf("Введите часы: ");
    scanf_s("%lf", &hours);
    printf("Введите минуты: ");
    scanf_s("%lf", &minutes);
    gradus(hours, minutes);
}
→ Ссылка