Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Grey5
2 / 2 / 0
Регистрация: 11.03.2010
Сообщений: 178
1

Как это работает?

16.04.2012, 16:24. Просмотров 480. Ответов 7
Метки нет (Все метки)

Читаю я кое какой "учебник", и в нём появился такой вот кусок кода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int input (tank& t, char map[s][c])
{
    char act;
    int ch;
    int e = 0;
    act = _getch();
    ch = static_cast<int>(act);
    if (ch == north || ch == east || ch == west || ch == south)
    {
        movement_if(t, static_cast<cardinal_dirs>(ch), map);
    }
    else if (ch == 27)
    {
        e = 1;
    }
    else if (ch == -32)
    {
        input(t,map);  // Вызов функцией самой себя - рекурсия
    }
    return e;
}
Меня интересует как подаёт значения _getch и куда уходит "-32".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2012, 16:24
Ответы с готовыми решениями:

Как это работает? Я хочу спросить как работает C++ и где можно про него почитать
Привет, котоны. Заранее благодарю. Это будет моих общих вопросов нить, т.к....

Русификация.Работает-супер! Обьяснитте, как это работает?
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; using...

Как это работает?
Здравствуйте, можете, пожалуйста, поэтапно объяснить как работает приведенный...

Как это работает
Здравствуйте уважаемые форумчане!Как это работает? Как например предотвратить...

Как это работает?
Доброго времени суток. Граждане программисты, подскажите пожалуйста как...

7
Nekto
342 / 287 / 37
Регистрация: 23.03.2012
Сообщений: 838
16.04.2012, 16:40 2
-32 хз, если честно. char вроде с 0 нумеруется.
0
Grey5
2 / 2 / 0
Регистрация: 11.03.2010
Сообщений: 178
16.04.2012, 17:00  [ТС] 3
Где то я вычитал, -32 значит код управляющей клавиши, то есть стрелочек.
0
Nekto
342 / 287 / 37
Регистрация: 23.03.2012
Сообщений: 838
16.04.2012, 17:28 4
Цитата Сообщение от Grey5 Посмотреть сообщение
Где то я вычитал, -32 значит код управляющей клавиши, то есть стрелочек.
72 вверх, 75 влево, 77 вправо, 80 вниз
0
Grey5
2 / 2 / 0
Регистрация: 11.03.2010
Сообщений: 178
16.04.2012, 18:23  [ТС] 5
Посмотри что тебе выведет эта программа. И кстати, почему если убрать один _getch() в конце, оставив всего два на всю программу, то она завершиться не спросив моего согласия?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <conio.h>
#include <iostream>
#include <clocale>
 
using namespace std;
 
int main()
{
int a;
char b;
b=_getch();
a = static_cast<int>(b);
cout<<a; 
   _getch();
   _getch();
   return 0;
}
0
Nekto
342 / 287 / 37
Регистрация: 23.03.2012
Сообщений: 838
16.04.2012, 18:40 6
Цитата Сообщение от Grey5 Посмотреть сообщение
Посмотри что тебе выведет эта программа. И кстати, почему если убрать один _getch() в конце, оставив всего два на всю программу, то она завершиться не спросив моего согласия?
советую вместо
C++
1
_getch();
в роли паузы использовать
C++
1
system("pause");
Добавлено через 12 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
 setlocale(LC_ALL,".1251");
 int key;
 for(;;) 
 {
  key = getch();
  if( (key == 0) || (key == 0xe0) ) 
   {
    key = getch();
    cout<<"ГђГ*ñøèðåГ*Г*ûé ASCII-êîä:\t";
   }
  else cout<<"ASCII-êîä:\t";
  cout<<key<<endl;
  if( key == 27) break;
 }
 system("pause");
 return 0;
}
Добавлено через 2 минуты
В случае стрелочек getch() возвращает 224 и надо делать getch() еще раз, чтобы получить нужный код.
0
Grey5
2 / 2 / 0
Регистрация: 11.03.2010
Сообщений: 178
17.04.2012, 14:22  [ТС] 7
Почему то у меня просил поставить "_" перед "getch()". Кстати использую я Microsoft Visual C++ 2010 Express.
Я так и не понял как работает код автора, он использовал рекурсию что бы не было две итерации.

Добавлено через 19 часов 0 минут
Вопрос ещё в силе.
0
Nekto
342 / 287 / 37
Регистрация: 23.03.2012
Сообщений: 838
17.04.2012, 15:53 8
Цитата Сообщение от Grey5 Посмотреть сообщение
Вопрос ещё в силе.
При превращении unsigned char в int получается 224, при превращении signed char в int получается -32. Т.е. в случае расширенных ASCII он запускает рекурсию, чтоб считать уже код клавиши
north,east,west,south наверное задефайнены нужными числами (72,77,75,80)
0
17.04.2012, 15:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2012, 15:53

Как это работает?
#include &lt;iostream&gt; int *fun() { int a = 5; return &amp;a; } int main() {...

Как это работает?
#include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; int main() {...

Как это работает?
Не могу понять, как это работает: #include &lt;iostream&gt; using namespace...


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

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

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