![]() |
|
Модераторы: bsa |
![]()
|
|
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
Здравствуйте, ниже представленный код рисует календарь. Мне нужно, чтобы при нажатии клавиши влево - показывался предыдущий месяц, вправо - следующий. На kbhit не реагирует, что я делаю не так? Как это исправить?
|
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Честно, не знаю, что за константы такие KEY_RIGHT и KEY_LEFT...
Зачем так извращаться? Пользуйтесь _getch()...
Ну так у Вас там: Сначала этот iYear введите, а уж потом к kbhit приступайте... По поводу дня недели, можно посмотреть здесь... Добавлено через 7 минут и 47 секунд Да, когда iMonth++ или iMonth-- делаете, не забывайте проверять диапазон 1 <= iMonth <= 12 (изменяя год, если нужно) -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| zeitgeistz |
|
||||||||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
Я не заметил, что пишу после
Перед ним написал
и всё это впихнул в бесконечный цикл
только не знаю как два if'a там примирить, если один if, то работает, если два if'а, то работает какой-то один. что я делаю не так?
при таком раскладе: вводим 5 2013, рисуется май, если жмакаем стрелку влево - рисуется апрель, ещё раз влево - март, всё как и надо, но стрелка вправо просто так не работает: нужно нажать enter и потом стрелка вправо сработает, как миновать нажатия enter'а? Это сообщение отредактировал(а) zeitgeistz - 3.5.2013, 20:01 |
||||||||
|
|||||||||
| feodorv |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Ну это не правильно же... На каждый if свой _getch()??? Вот и приходится жать, чего не поподя...
Добавлено через 3 минуты и 22 секунды Как насчет
? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||
|
|||||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
Да, Вы правы, теперь стрелки как положено заработали. Сейчас с годом помудрю и отпишусь минут через 15. Только я так и не понял, почему в том случае приходилось enter нажимать перед стрелкой, в чём дело было?
|
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Трудно сказать с уверенностью, поскольку сами стрелки порождают последовательность { 0xe0, 75/77 }, да ещё и в каждый if было запихнуто по _getch()'у (то есть на каждый if нужно было ввести по своему символу)... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| zeitgeistz |
|
||||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
А что такое 0xe0?
Насчёт года, для стрелки влево дописал
для вправо наоборот. Только для стрелки вправо немного неправильно написал, при переходе на след. год появляется промежуточное пустое окошко с заголовками дней недели, после ещё одной стрелки отрисовывается январь Как от этого избавиться можно?
Это сообщение отредактировал(а) zeitgeistz - 3.5.2013, 21:20 |
||||
|
|||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Ну если уже значение 0 неприемлемо для iMonth, то почему if (iMonth < -1)???
Посмотрел начало кода: Это в корне не верно, если Вы собираетесь показывать календарь и для другого года. У Вас должны быть два набора неизменяемых массивов - для невисокосного года и отдельно для високосного. Соответственно, когда год меняется, нужно определить подходящий набор. Потом. Високосность не определяется простым делением на 4 (например, 1900 год не был високосным), правило сложнее -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
Там для стрелки влево я ещё до Вашего ответа отредактировал, вправо стрелка не так работает, давайте с этим разберёмся, а потом за високосный возьмёмся
|
|||
|
||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
Ну чевой там, есть идеи?
|
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Ну совершенно аналогично:
Почему 0? Ведь месяцы начинаем отсчитывать от 1... Добавлено через 35 секунд Да, лечь спать))) -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
Ай спасибо большое! Заработало как надо!
Рано ещё спать, високосные криво работают
Это сообщение отредактировал(а) zeitgeistz - 4.5.2013, 14:00 |
|||
|
||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
up
|
|||
|
||||
| feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Гм. Я бы поправил всё)))) Первым делом - оформление кода. Вторым - ввёл бы подпрограмму отрисовки месяца календаря:
Тогда программа значительно упроститься и приобретёт более благородный вид. Например:
В-третих, я бы поправил определение дня недели у текущего месяца - оно делается неверно: два смежных месяца не стыкуются друг с другом по дням недели. То есть написал бы dayOfWeek для произвольного месяца-года. В-четвёртых, я бы сразу показывал бы текущий месяц, а ввод произвольного месяца-года убрал бы внутрь цикла. Править текущий код я не могу - ничего в нём не понимаю))) Это сообщение отредактировал(а) feodorv - 4.5.2013, 14:38 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
А как isLeapYear будет выглядеть?
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |