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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться в чём проблема, Компилируется не так, как хотелось бы 
V
    Опции темы
N1ko
Дата 30.12.2007, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Посмотрите пожалуйста программу.  Я только начал работать с C++. При нажатии клавиши "d" она не сразу реагирует... А реагирует только после 4-5 нажатия. И ещё один вопрос по поводу всё той же программы. Как вот эту команду написать по человечески while((getch()!='e')&(getch()!='x')&(getch()!='i')&(getch()!='t')). Что бы при вводе слова exit она выходила из цикла.
Код



include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include<iostream.h>

int main()
{
   int gdriver = DETECT, gmode, errorcode;
   initgraph(&gdriver, &gmode, "");
   int x,y;
   x=40;
   y=50;
   int c;
    rectangle(x,y,x+10,y-10);

   while((getch()!='e')&(getch()!='x')&(getch()!='i')&(getch()!='t'))
   {
   if(getch()=='d')
   {
    x=x+5;
    rectangle(x,y,x+10,y-10);
   }
   }

   getch();
   return 0;
}


PM MAIL ICQ   Вверх
bsa
Дата 30.12.2007, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



N1ko, все просто. функция getch() ожидает нажатия одной кнопки. Таким образом, чтобы проверилось условие в while() она выполняется 4 раза. Затем выполняется еще внутри цикла while(), когда ты ожидаешь ввода клавиши d.
во-первых, чтобы узнать, была ли нажата кнопка или нет, необходимо использовать функцию kbhit()
во-вторых, на выход лучше повесить одну кнопку, а не слово, так как ввод слова в твоей ситуации очень сложен.
в-третьих, операция & - это побитовая операция AND. А тебе нужна была логическая, а это &&
PM   Вверх
N1ko
Дата 30.12.2007, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо огромное за помощ.
PM MAIL ICQ   Вверх
bsa
Дата 30.12.2007, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Функция kbhit() проверяет, была ли нажата какая либо клавиша или нет. Если она была нажата, то возвращается ненулевое значение, иначе нулевое.
тебе надо использовать так:
Код
if ( kbhit() ) {
      switch(getch()) {
           case 'x':
               //что делать, если была нажата кнопка 'x'
               break;
           case 'd':
               //что делать, если была нажата кнопка 'd'
               break;
           default:
               //что делать, если была нажата любая другая кнопка
               break;
      }
}

PM   Вверх
bsa
Дата 31.12.2007, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Код
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>

int main()
{
   int gdriver = DETECT, gmode, errorcode;
   initgraph(&gdriver, &gmode, "");
   int x,y;
   x=40;
   y=50;
   int c, needExit = 0;
   rectangle(x,y,x+10,y-10);

   do {
         if(kbhit()) {
             switch(getch()) {
                   case 'd':
                      x=x+5;
                      rectangle(x,y,x+10,y-10);
                      break;
                   case 'x':
                      needExit = 1;
                      break;
                   default:
                      break;
             }
   }while(!needExit);

   getch();
   return 0;
}
Естественно, этот код я не проверял. Но теперь, надеюсь, идея понятна.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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