Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2016, 23:07   #1
gleensande
Пользователь
 
Регистрация: 03.04.2016
Сообщений: 39
По умолчанию Библиотека time.h в Си

Доброго дня/ночи!

Задание такое:

Разработать программу перечисления всех лет из любого произвольно заданного диапазона, в которых указанный годовой квартал заканчивается в заданный день недели.
/ Пояснения: Все исходные данные должны передаваться программе через аргументы командной строки. При этом годы заданного диапазона должны быть записаны через дефис, названия дня недели представлено латинской аббревиатурой, а номер квартала записан римскими цифрами. Результат должен отображаться в поток стандартного вывода. /

Код:
	/*A.tm_wday=A.tm_yday*/=A.tm_sec=A.tm_min=A.tm_hour=0;
	A.tm_isdst=-1;
	
	for(i=year1;i<=year2;i++){
		A.tm_mday=day;
		A.tm_mon=month;
		A.tm_year=i;
		/*printf("%d%d ",i, A.tm_wday);*/
		if (A.tm_wday==wd)
			printf("%d ",i);
	}
Вот этот фрагмент кода у меня отвечает за присваивание структуре дня, месяца и года (годы перечисляются от первого до последнего). Остальные позиции структуры А (tm) обнуляются. При этом в методичке написано, что A.tm_wday (вместе с A.tm_yday, которое меня не очень интересует в рамках данной задачи) вычисляются автоматически.
Обнуляю wday - он остается нулем на протяжении всех итераций. Если не обнулять - в нем появляется мусор.
Нигде в интернете мною не было обнаружено подтверждения, что действительно автоматически присваивается правильное значение.

Подскажите пожалуйста, действительно ли присваивается автоматом? Если да, то надо ли обнулять заранее? Если нет, то как тогда можно получить день недели без смертельных номеров?

Последний раз редактировалось gleensande; 08.11.2016 в 23:31.
gleensande вне форума Ответить с цитированием
Старый 09.11.2016, 23:50   #2
gleensande
Пользователь
 
Регистрация: 03.04.2016
Сообщений: 39
По умолчанию

Для автоматического заполнения двух данных полей можно использовать функцию стандартной библиотеки <time.h> mktime. Эта функция получает на вход указатель на структуру tm, а возвращает значение типа time_t, т.е. фактически преобразует структурное время в календарное(большое число в секундах). При этом значения полей tm_wday и tm_yday изначально игнорируются функцией mktime, а в процессе ее выполнения эти поля заполняются в зависимости от значений остальных (tm_mon, tm_year ...). Все значения выравниваются в своих диапазонах.
gleensande вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компонент работает в run-time, но не работает в design-time hon Компоненты Delphi 3 20.02.2013 20:17
Time Nikita++ Помощь студентам 1 16.12.2011 00:13
time.h ZET78 Общие вопросы C/C++ 9 23.05.2010 14:44
Time и If Genie Общие вопросы C/C++ 2 09.11.2009 02:51