найти количество секунд с момента последнего удара 12, когда пользователь вводит часы, минуты и секунды (c ++)

0

Я пытаюсь написать функцию, которая занимает время как три целых аргумента (часы, минуты и секунды) и возвращает количество секунд с момента последнего "часа 12". Используйте эту функцию для вычисления времени в секундах между двумя моментами, оба из которых находятся в пределах одного 12-часового цикла часов.

Это код, который у меня есть, и каждый раз, когда я его компилирую, он не перестает работать.

#include <iostream>
using std::cout;
using std::cin;
int passedSeconds(int, int, int);
int difference(int, int, int);

int main()
{
    int hour1, minute1, second1;
    int hour2, minute2, second2;

    cout << "1. Enter hours, minutes and seconds (range 00:00:00 - 23:59:59): ";
    cin >> hour1 >> minute1 >> second1;

    while(hour1 > 23 || minute1 > 59 || second1 > 59)
    {
        if(hour1 < 23)
            cout << "\nEnter correct hours value!";
        if(minute1 < 59)
             cout << "\nEnter correct minutes value!";
        if(second1 < 59)
             cout << "\nEnter correct seconds value!";

        cout << "\n1. Enter hours, minutes and seconds: ";
        cin >> hour1 >> minute1 >> second1;
    }
    cout << "Passed seconds from last 12 (am or pm): " << passedSeconds(hour1, minute1,second1);

    cout << "\n2. Enter hours, minutes and seconds (range 00:00:00 - 23:59:59): ";
    cin >> hour2 >> minute2 >> second2;

    while(hour2 > 23 || minute2 > 59 || second2 > 59)
    {
        if(hour2 < 23)
            cout << "\nEnter correct hours value!";
        if(minute2 < 59)
            cout << "\nEnter correct minutes value!";
        if(second2 < 59)
            cout << "\nEnter correct seconds value!";

        cout << "\n2. Enter hours, minutes and seconds: ";
        cin >> hour2 >> minute2 >> second2;
    }
    cout << "\nDifference between two times is "
         << difference(hour2, minute2, second2) - difference(hour1, minute1, second1) 
         << " seconds.";

    return 0;
}

int passedSeconds(int hour, int minute, int second)
{
    if(hour >= 12)
        hour -= 12;

    return hour * 60 * 60 + minute * 60 + second;
}

int difference(int hour, int minute, int second)
{
    return hour * 60 * 60 + minute * 60 + second;
}
  • 1
    Первое, что я заметил, если вы вложили операторы if, вам нужно использовать {}, чтобы окружить остальную часть следующего блока кода.
  • 1
    «он не остановится». Я подозреваю, что это происходит потому, что (hour1 > 23 || minute1 > 59 || second1 > 59) или (hour2 > 23 || minute2 > 59 || second2 > 59) всегда оценивается как правда. Вы проверяли эти значения с помощью отладчика?
Показать ещё 9 комментариев
Теги:
int

1 ответ

0

Я попытался скомпилировать ваш код с помощью компилятора Visual Studio и с компилятором GCC, и все работает отлично. Одна очевидная ошибка в вашем коде:

if(hour1 < 23)
    cout << "\nEnter correct hours value!";
if(minute1 < 59)
    cout << "\nEnter correct minutes value!";
if(second1 < 59)
    cout << "\nEnter correct seconds value!";

в первом и втором циклах while вы хотите вывести сообщение об ошибке, если ваши часы являются INvalid. Теперь вы показываете их, если они действительны, поэтому измените свой < to >.

Как я уже сказал, программа работала корректно, если я запускаю ее в консоли, ожидая ввода. Однако, если я запустил некоторые компиляторы онлайн, я заметил, что вы сказали. Это связано с тем, что я не мог использовать эту программу в качестве консоли. Попробуйте дать во всех данных, которые вы читаете одновременно...

Я пошел на сайт CodeRunner и увидел этот снимок экрана: Изображение 174551

Я не знаю, пробовал ли вы это, но попробуйте дать во всей программе ввод, прежде чем начать.. Так что-то вроде этого:

23 25 14
14 15 49

(обратите внимание, что это не оставляет места для проверки ошибок и просит ввести новый вход. Вам придется обращаться с этим по-другому...)

К сожалению, я не мог проверить это в CodeRunner, так как у меня нет каких-либо устройств OSX.

(Я также не мог ответить в качестве комментария, потому что у меня пока не хватает очков)

Надеюсь, это помогло вам!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню