Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 169
#1

Как правильно работать с функцией _getch() ? - C++

05.06.2014, 15:02. Просмотров 1028. Ответов 6
Метки нет (Все метки)

Ребята, задача такова:
Надо нарисовать фигурку в консоли. И дигать ,по консоли, фигурку стрелочками из клавиатуры.
Операторы котрые буду использовать(надо использовать)
system("cls") для обновления консоил после каждого движения фигруки.
_getch() для перехвата введенной стрелки на консоль и изменения положения фигурки.

Первая проблема: не могу разобраться с функцией getch() вроед иматериал нашел и как работает понятно , а код не выпоплняется.


пример кода.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <conio.h>
#include <windows.h>
 
using namespace std;
 
int main(){
    int choise;
    
        
    choise = getch();   
        switch (choise) {
            case 80: cout<< "DOWN"; break;
            case 75: cout<< "DOWN1"; break;
            case 77: cout<< "DOWN2"; break;
            case 72: cout<< "DOWN3"; break;
            default : "WRONG";  
        }
 
return 0;
}
ссылался на Коды клавиш и обработка событий клавиатуры в консоли

сейчас прошу просто сказать почему гетч не рабоатет прогу сам допишу)
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2014, 15:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно работать с функцией _getch() ? (C++):

Как правильно работать с функцией window()? - C++
Задача такая. Вывести в верхней части экрана небоольшой заголовок с менюшками. Затем прочитать файл и вывести его с прокруткой в оставшейся...

Как работать с getch()? - C++
Как использовать getch и в то же время чтобы например переменная а имплементирована на 1 (а++) Потому что обычно надо ждать пока...

Как работать с функцией SystemParametersInfo? - C++
Чтобы установить обои рабочего стола. Пишу вот так: #include &quot;stdafx.h&quot; #include &lt;Windows.h&gt; int _tmain(int argc, _TCHAR*...

Как работать с функцией memchr( ) в С++ - C++
Помогите пожалуйста разобраться как работает функция memchr() в С++. Я прогуглил этот вопрос, но почему-то большинство примеров на С, а мне...

Как работать с функцией rand() - C++
Помогите сделать так, чтобы rand() каждый раз выкидывал неповторяющиеся значения.

Как корректно работать с функцией fread? - C++
Мне необходимо считать информацию из одной директории, а потом поместить эту же информацию в другую директорию(скопировать). Возникла...

6
D_Ok
44 / 33 / 12
Регистрация: 11.02.2014
Сообщений: 134
05.06.2014, 15:16 #2
у стрелочек два кода 224 и 80 например, у вас ловится первое 224, а второе остается в потоке, добавте
C++
1
_getch();
перед
C++
1
choice = _getch();
должно заработать
0
dimcoder
Полярный
466 / 439 / 68
Регистрация: 11.09.2011
Сообщений: 1,138
05.06.2014, 15:17 #3
Может не то нажимаете, а WRONG просто не выводится?
Цитата Сообщение от MMt Посмотреть сообщение
default : "WRONG";
C++
1
default: cout << "WRONG" << endl;
[grammarnazi]choise - правильно choice[/grammarnazi]
0
zss
Модератор
Эксперт С++
6570 / 6132 / 2021
Регистрация: 18.12.2011
Сообщений: 15,984
Завершенные тесты: 1
05.06.2014, 15:18 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Для управляющий клавиши передается 2 байта.
Первый код, который читается равен 224, а второй - тот, что у Вас.
Поэтому сделайте так
C++
1
2
3
int choise;
    getch();       
    choise = getch();
2
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 169
05.06.2014, 16:16  [ТС] #5
dimcoder , пробовал - выводилось, при нажатии любой клавиши.
про choise в курсе лень было редактирвоать пост.

Сергей Сергеевич, спасибо. сделал - получилось. Но нифига не опнятно, зачем вы перед инициализацией
choise = getch(); предварительно обьявили ф-ю getch()?


Отсуда снова вопросы. У топиков со схожей темой описание одно и тоже. Гетсч возвращает 2 числа 224 + значние какую именно стрелку мы отпустили. Соответственно надо использовать _getch() чтобы отловить второе значние и сравнивать свич с уникальным значением стрелки, а не общим 224. ПОЧЕМУ В ВАШЕМ ВАРИАНТЕ СВИЧ СРАВНИВАЕТ СРАЗУ 2 ЗНАЧНИЕ И МЫ НЕ ОТСЕКАЕМ ОБЩЕЕ ЗНАЧНИЕ 224?

Думаю ответ будет очень обширным, и воможно у Вас нет времени все подробно объяснить. В таком случае я сам постараюсь разобраться если Вы таыкнете носом в какой книжке и и в какой теме почитать... Книг скачал очен много, но информация во многих дана или узко и довольно специфино (Шилдт справочник по с++ к примеру) или одна тема нарезаеться кругами по всей книге в 2-4 подхода, так что не опнятно с каого конце начинать читать и где начало где конце...
0
zss
Модератор
Эксперт С++
6570 / 6132 / 2021
Регистрация: 18.12.2011
Сообщений: 15,984
Завершенные тесты: 1
05.06.2014, 16:19 #6
Цитата Сообщение от MMt Посмотреть сообщение
предварительно обьявили ф-ю getch()?
Это ВЫЗОВ функции и запись того, что она возвращает в никуда,
т.к. это значение нам не нужно.
1
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 169
06.06.2014, 17:11  [ТС] #7
Написал код для программы. Снова есть вопросы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
 
int main()
{
    int top=0, left=0, choice, gor=5, vert=10;
 
     //ÁËÎÊ ÓÏÐÀÂËÅÍÈß ÏÎËÎÆÅÍÈÅÌ ÔÈÃÓÐÛ. 
     for( choice = 0; choice != 32 ; )
     {
        getch();                        
        choice = getch();
        
             switch (choice) //ÓÏÐÀÂËÅÍÈÅ ÎÒÑÒÓÏÀÌÈ Г‚ ÖÈÊËÅ ÎÒÐÈÑÎÂÊÈ ÔÈÃÓÐÛ
             {
                case 72:if(vert > 0)  vert--; 
                break;
                
                case 80: if(vert > 0) vert++;
                break;
                
                case 75: if(gor > 0) gor--; 
                break;
                
                case 77: if(gor > 0) gor++;
                break;
                
             }
    
            system ("cls");
            cout << "moove you cube! \n";
            for(int top=0; top!=vert; top++) //ÁËÎÊ ÎÒÑÒÓÏÀ ÑÂÅÐÕÓ
            {
                cout << endl;
            }
             
             for (int i=0; i<=4; i++)// ÁËÎÊ ÎÒÐÈÑÎÂÊÈ ÔÈÃÓÐÛ. Áëîê îòñòóïГ* ñëåâГ*.
             {
                    for(int m=0; m<=gor; m++)
                        cout << " ";                
                    for (int k=0; k <=6; k++)
                        cout << "x";                
                cout << endl;
             }
                    
    }
            
    return 0;
}
почему при попытке выйти за пределы 0 фигура пропадает?
0
06.06.2014, 17:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2014, 17:11
Привет! Вот еще темы с ответами:

Как правильно пользоваться функцией strtok - C++
Как правильно пользоваться етой ф-цией? Набросал код, надо пока разбить строку на слова(ф-ция int lek). #include &lt;iostream&gt; #include...

Как правильно реализовать инициализацию массива функцией? - C++
Здравствуйте! Мне нужно что бы вся инициализация массива происходила в отдельной функции и что бы этот массив можно было в дальнейшем...

Взаимосвязь правой кнопки мыши с функцией getch - C++
Доброго времени суток! Перед тем, как описать суть проблемы, небольшой ввод: в своем проекте (консольная игрушка) использую функцию getch,...

Как правильно работать с vector? - C++
// Create buttons. int const size = 5; int x = 50; int y = 50; int j = 0; vector&lt;Button*&gt; vLevel; for (int i = 0; i &lt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.