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

Как это работает? - C++

Восстановить пароль Регистрация
 
Grey5
2 / 2 / 0
Регистрация: 11.03.2010
Сообщений: 178
16.04.2012, 16:24     Как это работает? #1
Читаю я кое какой "учебник", и в нём появился такой вот кусок кода
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".
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2012, 16:24     Как это работает?
Посмотрите здесь:

C++ Как это работает
Как это работает? C++
C++ объясните как это работает
Как это работает? C++
Русификация.Работает-супер! Обьяснитте, как это работает? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
16.04.2012, 16:40     Как это работает? #2
-32 хз, если честно. char вроде с 0 нумеруется.
Grey5
2 / 2 / 0
Регистрация: 11.03.2010
Сообщений: 178
16.04.2012, 17:00  [ТС]     Как это работает? #3
Где то я вычитал, -32 значит код управляющей клавиши, то есть стрелочек.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
16.04.2012, 17:28     Как это работает? #4
Цитата Сообщение от Grey5 Посмотреть сообщение
Где то я вычитал, -32 значит код управляющей клавиши, то есть стрелочек.
72 вверх, 75 влево, 77 вправо, 80 вниз
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;
}
Nekto
342 / 287 / 10
Регистрация: 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() еще раз, чтобы получить нужный код.
Grey5
2 / 2 / 0
Регистрация: 11.03.2010
Сообщений: 178
17.04.2012, 14:22  [ТС]     Как это работает? #7
Почему то у меня просил поставить "_" перед "getch()". Кстати использую я Microsoft Visual C++ 2010 Express.
Я так и не понял как работает код автора, он использовал рекурсию что бы не было две итерации.

Добавлено через 19 часов 0 минут
Вопрос ещё в силе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2012, 15:53     Как это работает?
Еще ссылки по теме:

C++ Как это работает?
C++ Как это работает?
Как это работает? Я хочу спросить как работает C++ и где можно про него почитать C++

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

Или воспользуйтесь поиском по форуму:
Nekto
342 / 287 / 10
Регистрация: 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)
Yandex
Объявления
17.04.2012, 15:53     Как это работает?
Ответ Создать тему
Опции темы

Текущее время: 00:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru