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

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

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

Программа для определения кода клавиши выдает неверный код кнопок - C++

25.01.2013, 15:16. Просмотров 931. Ответов 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
#include <conio.h>
#include <iostream>
#include <clocale>
 
using namespace std;
 
 
int main()
{
   setlocale(LC_CTYPE,"Russian");
char act;
int ch,a;
do
{ act = _getch();
ch = static_cast<int>(act);
if (ch == 27)
{
exit(0);
}
else
{ cout << ch << "\n";
_getch();
 
}} while ( a = 2 );
 
 
}

Всё работает, но есть один нюанс. Когда я нажимаю одну из клавиш – стрелок, программа выдает код «-32». Затем, если нажать пробел, выводится «32», а при последующем нажатии клавиш со стрелками начинают выдаваться правильные коды стрелок (72, 75, 80, 77). Если еще раз нажать пробел, снова начинаются глюки. Если не трудно, объясните новичку, как и почему оно всё происходит, и как это исправить. ;-)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2013, 15:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа для определения кода клавиши выдает неверный код кнопок (C++):

функция выдает код нажатой клавиши - C++
привет всем) подскажите пожалуйста есть ли такой оператор, который выдаст код нажатой клавиши,без нажатия клавиши ввода,т.е. нажали...

прога, которая по нажатой клавише выводит ascii - код символа это клавиши или scan - код самой клавиши. - C++
написать программу, которая по нажатой клавише выводит ascii - код символа этой клавиши или scan - код самой клавиши. осуществите вывод в...

Выдает ошибку "Неверный тип для индекса массива" - C++
Выдает вот такую ошибку: invalid types '&lt;unresolved overloaded function type&gt;' for array subscript Немогу понять в чем дело. Место...

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

Программа для определения дня недели для произвольной даты - C++
Доброго времени суток! Суть программы состоит в том, что нужно определить день недели для даты dd/mm/gg, если известен день недели 1 января...

Почему программа выдает ошибку при первом запуске, а дальше работает нормально? Код C - C++
Подскажите почему программа выдает ошибку при первом запуске, а дальше работает нормально? #include &lt;iostream&gt; #include &lt;cstdlib&gt; ...

4
Mycola
22 / 12 / 13
Регистрация: 23.03.2013
Сообщений: 157
16.07.2014, 19:48 #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
#include <conio.h>
#include <iostream>
using namespace std;
 
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    char act;
    int ch, a;
    do
    {
        act = _getch();
        ch = (int)(act);
        if (ch == 27)
        {
            exit(0);
        }
        else
        {
            cout << ch << "\n";
            _getch();
        }
    } while (a = 2);
}
0
ValeryS
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,453
16.07.2014, 20:02 #3
Цитата Сообщение от XenoFlize Посмотреть сообщение
while ( a = 2 );
что сия аллегория означает?
Цитата Сообщение от Mycola Посмотреть сообщение
C++
1
2
3
4
5
6
char act;
    int ch, a;
    do
    {
        act = _getch();
        ch = (int)(act);
зачем такие танцы если _getch(); и так возвращает int
http://msdn.microsoft.com/ru-ru/library/078sfkak.aspx

Добавлено через 2 минуты
Цитата Сообщение от XenoFlize Посмотреть сообщение
клавиш со стрелками начинают выдаваться правильные коды стрелок (72, 75, 80, 77).
все эти коды это буквы
служебные клавиши выдают двухбайтовый код
1
Mycola
22 / 12 / 13
Регистрация: 23.03.2013
Сообщений: 157
16.07.2014, 20:17 #4
нет первая программа после нажатия пробела что то косячела код я не пересматривал просто поменял что бы не косячело, а там а=2 это просто что бы сделать бесконечный цикл так как она не инициализирована. я думал вы догадаетесь, можно было и лучше но что спрашивалось?..
0
ValeryS
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,453
16.07.2014, 20:32 #5
Mycola,
а я у автора и спрашивал, что за тайный смысл сделать такой бесконечный цикл
Цитата Сообщение от Mycola Посмотреть сообщение
нет первая программа после нажатия пробела что то косячела код
косила она из за того что из int делали char а потом наоборот
служебные символы часто бывают двубайтовые и в потоке остается "хвост"
0
16.07.2014, 20:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2014, 20:32
Привет! Вот еще темы с ответами:

Функция перемножения матриц выдает неверный результат - C++
int **mas_1; int **mas_2; int **mas_3;//глобальные void multiply(int row1, int col1, int row2, int col2) { if (row1 == col2) ...

Программа для определения даты следующего дня - C++
помогите написать программу в для определения даты следующего дня

Программа для определения угла между векторами - C++
Я нашел такую программу внизу, немного исправил ее, но не знаю, что watch означает и зачем он вообще и все ли тут правильно. Мне...

Программа для определения минорных аккордов от мажорных - C++
В общем решил для облегчения игры на гитаре написать программу для определения минорных аккордов от мажорных. Вдаваться в подробности не...


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

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

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