Я пытаюсь написать функцию, которая занимает время как три целых аргумента (часы, минуты и секунды) и возвращает количество секунд с момента последнего "часа 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;
}
Я попытался скомпилировать ваш код с помощью компилятора 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 и увидел этот снимок экрана:
Я не знаю, пробовал ли вы это, но попробуйте дать во всей программе ввод, прежде чем начать.. Так что-то вроде этого:
23 25 14
14 15 49
(обратите внимание, что это не оставляет места для проверки ошибок и просит ввести новый вход. Вам придется обращаться с этим по-другому...)
К сожалению, я не мог проверить это в CodeRunner, так как у меня нет каких-либо устройств OSX.
(Я также не мог ответить в качестве комментария, потому что у меня пока не хватает очков)
Надеюсь, это помогло вам!
(hour1 > 23 || minute1 > 59 || second1 > 59)
или(hour2 > 23 || minute2 > 59 || second2 > 59)
всегда оценивается как правда. Вы проверяли эти значения с помощью отладчика?