#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
Теперь вы можете создавать свою программу