Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
05.06.2014, 15:02     Как правильно работать с функцией _getch() ? #1
Ребята, задача такова:
Надо нарисовать фигурку в консоли. И дигать ,по консоли, фигурку стрелочками из клавиатуры.
Операторы котрые буду использовать(надо использовать)
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;
}
ссылался на Коды клавиш и обработка событий клавиатуры в консоли

сейчас прошу просто сказать почему гетч не рабоатет прогу сам допишу)
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
D_Ok
43 / 32 / 12
Регистрация: 11.02.2014
Сообщений: 134
05.06.2014, 15:16     Как правильно работать с функцией _getch() ? #2
у стрелочек два кода 224 и 80 например, у вас ловится первое 224, а второе остается в потоке, добавте
C++
1
_getch();
перед
C++
1
choice = _getch();
должно заработать
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
05.06.2014, 15:17     Как правильно работать с функцией _getch() ? #3
Может не то нажимаете, а WRONG просто не выводится?
Цитата Сообщение от MMt Посмотреть сообщение
default : "WRONG";
C++
1
default: cout << "WRONG" << endl;
[grammarnazi]choise - правильно choice[/grammarnazi]
zss
Модератор
Эксперт С++
 Аватар для zss
5948 / 5553 / 1785
Регистрация: 18.12.2011
Сообщений: 14,188
Завершенные тесты: 1
05.06.2014, 15:18     Как правильно работать с функцией _getch() ? #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Для управляющий клавиши передается 2 байта.
Первый код, который читается равен 224, а второй - тот, что у Вас.
Поэтому сделайте так
C++
1
2
3
int choise;
    getch();       
    choise = getch();
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
05.06.2014, 16:16  [ТС]     Как правильно работать с функцией _getch() ? #5
dimcoder , пробовал - выводилось, при нажатии любой клавиши.
про choise в курсе лень было редактирвоать пост.

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


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

Думаю ответ будет очень обширным, и воможно у Вас нет времени все подробно объяснить. В таком случае я сам постараюсь разобраться если Вы таыкнете носом в какой книжке и и в какой теме почитать... Книг скачал очен много, но информация во многих дана или узко и довольно специфино (Шилдт справочник по с++ к примеру) или одна тема нарезаеться кругами по всей книге в 2-4 подхода, так что не опнятно с каого конце начинать читать и где начало где конце...
zss
Модератор
Эксперт С++
 Аватар для zss
5948 / 5553 / 1785
Регистрация: 18.12.2011
Сообщений: 14,188
Завершенные тесты: 1
05.06.2014, 16:19     Как правильно работать с функцией _getch() ? #6
Цитата Сообщение от MMt Посмотреть сообщение
предварительно обьявили ф-ю getch()?
Это ВЫЗОВ функции и запись того, что она возвращает в никуда,
т.к. это значение нам не нужно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2014, 17:11     Как правильно работать с функцией _getch() ?
Еще ссылки по теме:

C++ Как правильно работать со строками?
C++ Как правильно работать с vector?
C++ Как работать с функцией SystemParametersInfo?

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

Или воспользуйтесь поиском по форуму:
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
06.06.2014, 17:11  [ТС]     Как правильно работать с функцией _getch() ? #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 фигура пропадает?
Yandex
Объявления
06.06.2014, 17:11     Как правильно работать с функцией _getch() ?
Ответ Создать тему
Опции темы

Текущее время: 16:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru