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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
ZeBerg
0 / 0 / 0
Регистрация: 17.11.2013
Сообщений: 4
04.12.2013, 00:10     Не работает getch() #1
Здравствуйте, решил написать первую серьезную программу ,в данном случае змейку, не получается ввести нажатие клавиши с клавиатуры.После поиска гуглом нашел 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++
C++ getch()
getch() C++
C++ Не работает getch()
Программа не работает когда пишу "getch()", исправьте ошибки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Большой_Стен
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
 Аватар для Schizorb
508 / 460 / 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()
Ответ Создать тему
Опции темы

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