Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странная работа getch(), Возвращает разные значения 
:(
    Опции темы
efpies
Дата 21.6.2009, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 20.6.2009
Где: СПб

Репутация: нет
Всего: нет



Требуется: при нажатии вверх (72) или вниз (80) выполнить какое-то действие, иначе ждать, пока нажмут.
Следующий код
Код
unsigned char opt; //почему unsigned char - потому что с int не работает, но зато работает в подобном цикле выше

do
{
   fflush(stdin);
   opt = getch();

   switch(opt)
   {
      case 72:        opt = '0';
                            break;

      case 80:        opt = '1';
                            break;

      case 27:        return h;
     }
}
while(opt < '0' || opt > '1');

игнорирует возвращаемое getch(). то есть вообще. если вызвать после цикла
Код
printf("%d",opt);
fflush(stdin);
getch();

оно не выполнится! то есть, не выведется ничего и getch() не вызовется!
иногда мне удавалось создавать такие комбинации операторов, что getch() возвращал в opt всегда 0. кроме нажатия на другие кнопки (нет, я что-то знаю о том, что на самом деле код вверх - это 0 и 72, но в других же местах аналогичный код работает!). причем, если записать условия case в кавычках (e.g. case '72'), то все чудесным образом работало..
в итоге я нашел рабочую комбинацию - с условием
Код
while(opt != '0' && opt != '1');

как влияет условие цикла (и внутри цикла) на то, что вернет getch(), для меня загадка.
компилятор BCB6
сорри, если обсуждалось
PM MAIL   Вверх
zim22
Дата 21.6.2009, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(efpies @  21.6.2009,  16:31 Найти цитируемый пост)
оно не выполнится! то есть, не выведется ничего и getch() не вызовется!

почитайте как getch() работает.... его необходимо 2 раза вызывать.

Это сообщение отредактировал(а) zim22 - 21.6.2009, 16:49


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.2673 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.