0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
1

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

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

Author24 — интернет-сервис помощи студентам
Ребята, задача такова:
Надо нарисовать фигурку в консоли. И дигать ,по консоли, фигурку стрелочками из клавиатуры.
Операторы котрые буду использовать(надо использовать)
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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.06.2014, 15:02
Ответы с готовыми решениями:

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

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

Простая программа Hello world, но с функцией getch()
Здравствуйте форумчане, я только начал программировать на языке си, и начал под линуксом. Вот код...

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

6
48 / 37 / 27
Регистрация: 11.02.2014
Сообщений: 134
05.06.2014, 15:16 2
у стрелочек два кода 224 и 80 например, у вас ловится первое 224, а второе остается в потоке, добавте
C++
1
_getch();
перед
C++
1
choice = _getch();
должно заработать
0
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
05.06.2014, 15:17 3
Может не то нажимаете, а WRONG просто не выводится?
Цитата Сообщение от MMt Посмотреть сообщение
default : "WRONG";
C++
1
default: cout << "WRONG" << endl;
[grammarnazi]choise - правильно choice[/grammarnazi]
0
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,688
05.06.2014, 15:18 4
Лучший ответ Сообщение было отмечено MMt как решение

Решение

Для управляющий клавиши передается 2 байта.
Первый код, который читается равен 224, а второй - тот, что у Вас.
Поэтому сделайте так
C++
1
2
3
int choise;
    getch();       
    choise = getch();
2
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
05.06.2014, 16:16  [ТС] 5
dimcoder , пробовал - выводилось, при нажатии любой клавиши.
про choise в курсе лень было редактирвоать пост.

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


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

Думаю ответ будет очень обширным, и воможно у Вас нет времени все подробно объяснить. В таком случае я сам постараюсь разобраться если Вы таыкнете носом в какой книжке и и в какой теме почитать... Книг скачал очен много, но информация во многих дана или узко и довольно специфино (Шилдт справочник по с++ к примеру) или одна тема нарезаеться кругами по всей книге в 2-4 подхода, так что не опнятно с каого конце начинать читать и где начало где конце...
0
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,688
05.06.2014, 16:19 6
Цитата Сообщение от MMt Посмотреть сообщение
предварительно обьявили ф-ю getch()?
Это ВЫЗОВ функции и запись того, что она возвращает в никуда,
т.к. это значение нам не нужно.
1
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.06.2014, 17:11
Помогаю со студенческими работами здесь

как работать с функцией?
здравствуйте! подскажите пож - подключаю функцию: function translitIt($str) { $tr = array(...

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

Как работать с функцией ранг
:????

Как работать с функцией SystemParametersInfo?
Чтобы установить обои рабочего стола. Уже задал этот вопрос в C++ разделе, пока никто не ответил,...

Как работать с функцией SHGetFileInfoW?
Ребят задача требует получить информацию об объекте файловой системы : файле, папке, диске. Для...

Как работать с функцией SystemParametersInfo?
Чтобы установить обои рабочего стола. Пишу вот так: #include &quot;stdafx.h&quot; #include &lt;Windows.h&gt; ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru