подсчет дней и дней недели (с ++) - PullRequest
0 голосов
/ 14 марта 2019

Я работаю над программой на c ++, которая попросит пользователя ввести дату, например (12 31), и программа выведет число дней и день недели, чтобы (12 31) вернулось(365 Вт).Пока у меня есть

 #include <iostream>
 using namespace std;
 int main (){ 
 while (true)  
 cout << "Enter date: "; cin >> mon >>day;
 if (!mon && !day) break; //this is so that 
 when the user enters (0 0) the program ends
 }
 cout << "Bye" << endl;
 return 0;
 }

Как мне заставить программу сопоставить дату с номером и днем ​​недели?Я только начинаю изучать c ++ через онлайн-уроки, поэтому я не очень хорошо говорю, но кое-что знаю.Нужно ли создавать новую функцию?Моя главная проблема заключается в том, что я наткнулся на контрольно-пропускной пункт о том, как мне заставить программу подсчитывать дни с указанной даты (я думал о диапазоне от 1 до 365).Не ищу ответа, но некоторая помощь будет хорошей.

1 Ответ

1 голос
/ 14 марта 2019

Не ищу ответа, но некоторая помощь была бы полезна.

когда вы делаете cin >> mon >>day, сначала объявляете int переменные mon и день , но также проверьте возврат, поэтому if (!(cin >> mon day)) ...EOF occurred...

Если вы посмотрите на время управления функцией, у вас есть те, которые объявлены через <time.h>, включая mktime и, как вы можете видеть, они работают с struct tm, содержащим именно то, что вы хотите:

int tm_wday;   /* Day of the week (0-6, Sunday = 0) */
int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */

mktime также именно то, что вам нужно:

Функция mktime () преобразует разбитую структуру времени, выраженную в местном времени, в представление календарного времени.

Так что вам просто нужно установить поля:

int tm_sec;    /* Seconds (0-60) */
int tm_min;    /* Minutes (0-59) */
int tm_hour;   /* Hours (0-23) */
int tm_mday;   /* Day of the month (1-31) */
int tm_mon;    /* Month (0-11) */
int tm_year;   /* Year - 1900 */

tm_sec/tm_min/tm_hour может быть 0, tm_mday и tm_month являются входамивы должны получить (просто уменьшите tm_month после)

Единственная недостающая часть - это текущий год, но его легко установить, используйте time_t time(time_t *tloc);, возвращая текущее время, а затем конвертируйте его в struct tm используя struct tm *localtime(const time_t *timep);, затем установите остальные поля, как описано выше, затем вызовите mktime

Теперь вы можете сделать свою программу

...