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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
ZeBerg
0 / 0 / 0
Регистрация: 17.11.2013
Сообщений: 4
#1

Не работает getch() - C++

04.12.2013, 00:10. Просмотров 1598. Ответов 4
Метки нет (Все метки)

Здравствуйте, решил написать первую серьезную программу ,в данном случае змейку, не получается ввести нажатие клавиши с клавиатуры.После поиска гуглом нашел getch()
C++
1
2
3
4
5
6
char button_input()// ввод с клавы
{
char pressed_button;// переменная клавиши
pressed_button=getch();//ввод
return pressed_button;
}
Вот та часть кода с вводом.Я не знаю правильно ли я использовал данный оператор.



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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# include <iostream>
# include <windows.h>
# include <time.h>
// библиотека, нужна для использования функции Sleep()
# include <conio.h>
// библиотека, нужна для использования функций kbhit() и getch()
using namespace std;
int x=0,y=0;
int matrix[10][10];
void matrix_output(int x,int y) 
{
int matrix[10][10];//собственно матрица
 
}
char button_input()// ввод с клавы
{
char pressed_button;// переменная клавиши
pressed_button=getch();//ввод
return pressed_button;
}
int matrix_change(char button)
{
int x=0,y=0;//координаты головы
char w='w',a='a',s='s',d='d';
string str,str1,str2,str3,str4;//строки
str=button;//ввод в строку нажатую клавишу
str1=w;
str2=a;
str3=s;
str4=d;
if (strcmp(str.c_str(),str1.c_str())==0)//проверка на w 
{
    y++;//увеличение y
};
if (strcmp(str.c_str(),str2.c_str())==0)
{
    x--;//уменьшение x
};
if (strcmp(str.c_str(),str3.c_str())==0)
{
    y--;
 
};
if (strcmp(str.c_str(),str4.c_str())==0)
{
    x++;
 
};
return (x,y);
}
int main()
{
do
{
 char button=button_input();
 x,y=matrix_change(button);
 system("cls");
 for (int i=0; i<10; i++)
 {
  //цикл по переменной i, в котором перебираем строки матрицы
  for (int j=0; j<10; j++)
  {
   cout<<matrix[i][j]<<"\t"; //вывод очередного элемента матрицы
   cout<<endl; //переход на новую строку после вывода всех элементов строки
   matrix[x][y]=1;
   system("cls");
  }
 }
}
while(x<10,y<10);
int abcg;
cin>>abcg;
return 0;
}
Вот вся программа на сейчас.Она не дописана но выводит 0 хотя не должна(


Подскажите пожалуйста как правильно его использовать?
З.Ы Я знаю что я еврей и не умею красиво писать, да что уж там - вообще не умею писать)

Добавлено через 28 минут
После некоторых преобразований получилось красивее но не функциональней :
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
50
51
52
53
54
55
56
# include <iostream>
# include <windows.h>
# include <time.h>
// библиотека, нужна для использования функции Sleep()
# include <conio.h>
// библиотека, нужна для использования функций kbhit() и getch()
using namespace std;
int x=0,y=0;
int matrix[10][10];
void matrix_output(int x,int y) 
{
int matrix[10][10];//собственно матрица
 
}
 
int matrix_change()
{
int x=0,y=0;//координаты головы
 
char pressed_button=getch();
switch (pressed_button)
  {
  case 77:
   y--;
  case 61:
   x--;
  case 73:
   y++;
  case 64:
   x++;
}
return (x,y);
}
int main()
{
do
{
 
 system("cls");
 for (int i=0; i<10; i++)
 { x,y=matrix_change();
   matrix[x][y]=1;  
  for (int j=0; j<10; j++)//цикл по переменной i, в котором перебираем строки матрицы
  {
   cout<<matrix[i][j]<<"\t"; //вывод очередного элемента матрицы
   cout<<endl; //переход на новую строку после вывода всех элементов строки
   matrix[x][y]=1;
   system("cls");
  }
 }
}
while(x<10,y<10);
int abcg;
cin>>abcg;
return 0;
}
кусок с getch():
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int matrix_change()
{
int x=0,y=0;//координаты головы
 
char pressed_button=getch();
switch (pressed_button)
  {
  case 77:
   y--;
  case 61:
   x--;
  case 73:
   y++;
  case 64:
   x++;
}
return (x,y);
}
проблема таже
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2013, 00:10     Не работает getch()
Посмотрите здесь:

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

не работает ни _getch(), ни getch() - C++
собственно проблема: из консоли невозможно считать клавиши: Esc, Insert, Delete ....... и самое главное не читаются стрелки... считывает...

Ожидание клавиши Enter - getch не работает - C++
Друзья привет! Спасибо всем, кто откликнется! Мелкий вопрос, но честно, уже голова кругом идет! Второй день бьюсь над совершенно...

Как работает функция getch() и какая библиотека нужна? - C++
Ребят подскажите пожалуйста в C++ как работает функция getch() и какая библиотека нужна ?

Программа не работает когда пишу "getch()", исправьте ошибки - C++
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; using namespace std; int count(string a, int i); int main() { ...

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

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

getch(), char *name; - C++
Привет всем, у меня опять вопрос, задается тип данных например char name; это понятно но для чего там ставится знак * char* name; И...

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

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

ошибка getch() - C++
программа с функцией getch() компилируется адекватно, но пр выполнении выскакивает такое окошко

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Большой_Стен
13 / 13 / 1
Регистрация: 22.04.2012
Сообщений: 99
04.12.2013, 02:01     Не работает getch() #2
А зачем Вы используете столь непривычную конструкцию в функции matrix_change:
C++
1
return (x,y);
?
Вам известно, что в таком случае вернёт функция?
ZeBerg
0 / 0 / 0
Регистрация: 17.11.2013
Сообщений: 4
04.12.2013, 08:20  [ТС]     Не работает getch() #3
Ну я предполагал что вернет два числа x,y.
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
04.12.2013, 08:34     Не работает getch() #4
ZeBerg, почитайте про операцию "запятая". Поймете, что это не так.

Функция может вернуть только одно значение. Если нужно два - можно создать структуру с двумя полями и вернуть ее (есть также класс std::pair из STL, можно вернуть объект такого типа). Ну или передавать в функцию параметры по ссылке (или указателю), чтобы была возможность изменить их внутри функции.

Добавлено через 3 минуты
Вот, вроде так, проверьте.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// функция
void matrix_change(int & x, int & y)
{
char pressed_button=getch();
switch (pressed_button)
  {
  case 77:
   y--;
  case 61:
   x--;
  case 73:
   y++;
  case 64:
   x++;
  }
}
 
//...
// ее вызов
matrix_change(x, y);
ZeBerg
0 / 0 / 0
Регистрация: 17.11.2013
Сообщений: 4
04.12.2013, 09:09  [ТС]     Не работает getch() #5
Разве так? Вроде void вообще ничего не возвращает.
Я попробовал разделить на 2 функции которая меняет x, а вторая y здесь этой ошибки не должно быть, но 0 так и остался
вот сами 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
int matrix_change_x(char pressed_button)
{
switch(pressed_button)
{
case 64:
    x++;
case 61: 
    x--;
}
return(x);
 
}
 
int matrix_change_y(char pressed_button)
{
switch(pressed_button)
{
case 73:
    y++;
case 77: 
    y--;
}
return(y);
 
}

и функция ввода с клавы
C++
1
2
3
4
5
char matrix_input()
{
char pressed_button=getch();
return(pressed_button);
}

Вот сам вызов:
C++
1
2
x=matrix_change_x(pressed_button);
y=matrix_change_y(pressed_button);
Добавлено через 4 минуты
Ах, да, у меня же x и y это глобальные переменные.Я сделал эти функции void и убрал return а во время вызова ничего не приравнивал к этой функции.Но остался 0.
Yandex
Объявления
04.12.2013, 09:09     Не работает getch()
Ответ Создать тему
Опции темы

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