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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 484, средняя оценка - 4.97
djess92
0 / 0 / 0
Регистрация: 31.05.2010
Сообщений: 37
#1

getch() - C++

29.03.2011, 00:12. Просмотров 64747. Ответов 5
Метки нет (Все метки)

с помощью функции getch() узнал код клавиш...

C++
1
2
3
4
int n;
 
n = getch();
cout << n;
в результате esc = 27, backspace = 8, а вот стрелки (вверх,вниз,..) выдали код 22472 22480...

и когда я делаю сравнение, код не работает...

C++
1
2
3
4
5
6
7
8
int n;
 
n = getch()
 
if(n == 22472)
{
//сделать то то
}
какой правильный код управляющих стрелок и почему выдает такую странную цифру?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2011, 00:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос getch() (C++):

getch - C++
Недавно начал изучать си++. Что-то написал, не знаю по какой причине не компилирует. Прошу помочь. Думаю проблема где-то в 12 строке. ...

getch() - C++
Здравствуйте, форумчане! написал программу, которая должна переводить миллион символов 16-го кода в двоичный, но столкнулся с...

getch - C++
что озночает ввод синволов с помощю getch без буферизации

getch() error - C++
Привет всем, такое дело, не работает getch()! Вот, что пишет: C:\Users\AKHURS\Desktop\tetris_start.cpp:122: implicit declaration...

Замена getch() - C++
Здравствуйте. Решил повысить переносимость своего кода и задался вопросом: на что заменить getch? Насколько я понимаю, эта функция...

аналог getch() - C++
Ребят getch меня не устраивает следующим: когда окно теряет фокус он не работает. как выйти из ситуации?

5
IrineK
Заблокирован
29.03.2011, 12:38 #2
Небольшая иллюстрация:

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
#include <iostream>
#include <conio.h>
 
#define UP_ARROW 72
#define LEFT_ARROW 75
#define DOWN_ARROW 80
#define RIGHT_ARROW 77
 
using namespace std;
 
int main()
{   int KeyStroke;
    cout << "Press Escape to quit." << endl;
    do
{   KeyStroke = getch();
    if (KeyStroke == 224)
    {   KeyStroke = getch(); // Even though there are 2 getch() it reads one keystroke
        switch (KeyStroke)
        {
        case UP_ARROW:
            cout << "UP ARROW" << endl;
            break;
        case DOWN_ARROW:
            cout << "DOWN ARROW" << endl;
            break;
        case LEFT_ARROW:
            cout << "LEFT_ARROW" << endl;
            break;
        case RIGHT_ARROW:
            cout << "RIGHT_ARROW" << endl;
        break;
        default:
            cout << "Some other key." << endl;
        }
    }
    else cout << KeyStroke << endl;
 
}while (KeyStroke != 27); // 27 = Escape key
}
Добавлено через 10 часов 58 минут
Вот небольшое продолжение на эту же тему: можете порисовать символами '*' на консоли с помощью стрелок:

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
#include <iostream>
#include <conio.h>
#include <windows.h>
 
#define UP_ARROW 72
#define LEFT_ARROW 75
#define DOWN_ARROW 80
#define RIGHT_ARROW 77
 
using namespace std;
 
void gotoxy(int x,int y)
{
  HANDLE hConsole;
  COORD cursorLoc;
  cout.flush();
  cursorLoc.X = x;
  cursorLoc.Y = y;
  hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleCursorPosition(hConsole, cursorLoc);
}
 
int main()
{       int KeyStroke;
        cout << "Press Escape to quit." << endl;
        int i=40, j=10;
        gotoxy(i,j); cout<<"*";
        do
{       KeyStroke = getch();
        if (KeyStroke == 224)
        {       KeyStroke = getch(); // Even though there are 2 getch() it reads one keystroke
                switch (KeyStroke)
                {
                case UP_ARROW:
                        gotoxy(i,--j); cout<<"*";
                        break;
                case DOWN_ARROW:
                        gotoxy(i,++j); cout<<"*";
                        break;
                case LEFT_ARROW:
                        gotoxy(--i,j); cout<<"*";
                        break;
                case RIGHT_ARROW:
                        gotoxy(++i,j); cout<<"*";
                break;
               }
        }
 }while (KeyStroke != 27); // 27 = Escape key
}
5
djess92
0 / 0 / 0
Регистрация: 31.05.2010
Сообщений: 37
29.03.2011, 20:46  [ТС] #3
спасибо ))
а вот почему при getch выдает такой большой код стрелок?
0
Vandris
63 / 63 / 13
Регистрация: 19.01.2011
Сообщений: 94
29.03.2011, 21:10 #4
ну вам же привели код
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
#include <iostream>
#include <conio.h>
 
#define UP_ARROW 72
#define LEFT_ARROW 75
#define DOWN_ARROW 80
#define RIGHT_ARROW 77
 
using namespace std;
 
int main()
{       int KeyStroke;
        cout << "Press Escape to quit." << endl;
        do
{       KeyStroke = getch();
        if (KeyStroke == 224)
        {       KeyStroke = getch(); // Even though there are 2 getch() it reads one keystroke
                switch (KeyStroke)
                {
                case UP_ARROW:
                        cout << "UP ARROW" << endl;
                        break;
                case DOWN_ARROW:
                        cout << "DOWN ARROW" << endl;
                        break;
                case LEFT_ARROW:
                        cout << "LEFT_ARROW" << endl;
                        break;
                case RIGHT_ARROW:
                        cout << "RIGHT_ARROW" << endl;
                break;
                default:
                        cout << "Some other key." << endl;
                }
        }
        else cout << KeyStroke << endl;
 
}while (KeyStroke != 27); // 27 = Escape key
}
по нему видно что коды стрелок состоят из двух значений... 224 и там как получится в зависимости от стрелки... вверх стрелка - 72, влево - 75, вниз - 80, вправо - 77, вот вам и выдает 22472, 22475, 22480 или 22477
5
djess92
0 / 0 / 0
Регистрация: 31.05.2010
Сообщений: 37
29.03.2011, 21:13  [ТС] #5
окай)спасибо
0
Neonbl4
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 3
16.09.2013, 12:48 #6
красота)
0
16.09.2013, 12:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 12:48
Привет! Вот еще темы с ответами:

Не работает getch() - C++
Здравствуйте, решил написать первую серьезную программу ,в данном случае змейку, не получается ввести нажатие клавиши с клавиатуры.После...

getch и коды - C++
здравствуйте господа програмисты!как сделать что бы при нажатии клавиши &quot;w&quot; выскакивало надпись привет народ,но только при нажатии именно...

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

getch и TCHAR - C++
Встала следующая задача : 1) Недопустить ввод кол-ва символов &gt; 10 2) Заменить все символы на * (пароль) Всё это прекрасно...


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

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

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