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

getch() - C++

29.03.2011, 00:12. Просмотров 68169. Ответов 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)
{
//сделать то то
}
какой правильный код управляющих стрелок и почему выдает такую странную цифру?

http://www.cyberforum.ru/cpp-beginners/thread290731.html

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2011, 00:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос getch() (C++):

getch
Недавно начал изучать си++. Что-то написал, не знаю по какой причине не...

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

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

аналог getch()
Ребят getch меня не устраивает следующим: когда окно теряет фокус он не...

Не работает 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 / 1
Регистрация: 31.05.2010
Сообщений: 37
29.03.2011, 20:46  [ТС] #3
спасибо ))
а вот почему при getch выдает такой большой код стрелок?
0
Vandris
63 / 63 / 28
Регистрация: 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 / 1
Регистрация: 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()
программа с функцией getch() компилируется адекватно, но пр выполнении...

Замена getch()
Здравствуйте. Решил повысить переносимость своего кода и задался вопросом: на...

getch и TCHAR
Встала следующая задача : 1) Недопустить ввод кол-ва символов &gt; 10 2)...

Не работает getch()
не работает задержка по getchar() #include &lt;iostream&gt; #include &lt;cstdlib&gt;...


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

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

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