подсчет дней и дней недели (c )

#c #new-project

#c #новый проект

Вопрос:

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

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

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

Комментарии:

1. в этом коде есть несколько фрагментов, которые остановят его компиляцию …. для начала, main(true) (как вы думаете, что здесь делает true?) cin >> mon >> day (как вы думаете, какого типа mon / day?) и тогда мы собираемся проигнорировать многострочный комментарий

2. int main (true) Да?? Из какого базового учебника по c вы это взяли?

3. Помимо main(true) этого, сделайте правильный отступ в коде и установите фигурные скобки. И я предполагаю, что «когда пользователь вводит (0 0), программа завершается» должно было быть частью комментария

4. mktime — ваш друг.

5. Извините, когда я вводил код, я ввел его неправильно.

Ответ №1:

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

когда вы cin >> mon >>day сначала объявляете переменные int mon и day, но также проверяете возврат, поэтому 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

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