Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2007, 01:36   #1
shad0w
Пользователь
 
Регистрация: 02.12.2007
Сообщений: 17
По умолчанию проблема с указателями =\

привет всем, прошу помочь разобраться, есть код:
Цитата:

void keyboard(unsigned *x, unsigned *y, unsigned char *man) {
int f;
f = getch();
switch(f)
{
case 72:
draw (++x,y,man);
break;

case 80:
draw (x,++y,man);
break;

}
}



void main()
{
unsigned x = 150;
unsigned y = 180;


unsigned char man[64] = {0,0,0,0,0,0,0,0,
0,0,0,4,4,0,0,0,
0,0,4,4,4,4,0,0,
0,4,4,4,4,4,4,0,
0,4,4,4,4,4,4,0,
0,0,4,4,4,4,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0};

SetMode(0x13);

while(1) {
draw (&x,&y,man);
keyboard(&x,&y,man);
}
}
этот код должен двигать хрень, которая заключена в массив man, влево и вверх, а в итоге выходит что она перемещает ее на большое расстояние вверх, и на такое же расстояние влево и на этом все останавливается, не могу понять что я делаю не так(

Последний раз редактировалось shad0w; 02.12.2007 в 02:14.
shad0w вне форума Ответить с цитированием
Старый 02.12.2007, 01:54   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Не отношу себя к знатокам Си, но по-моему, у вас методологическая ошибка - вы однократное нажатие обрабатываете как постоянно нажатую клавишу.
Нужно просто убрать цикл, оставив однократную обработку, т.е. вместо
Код:
while(1) {
draw (&x,&y,man);
keyboard(&x,&y,man);
}
оставить
Код:
draw (&x,&y,man);
keyboard(&x,&y,man);

Последний раз редактировалось mihali4; 02.12.2007 в 01:57.
mihali4 вне форума Ответить с цитированием
Старый 02.12.2007, 02:04   #3
shad0w
Пользователь
 
Регистрация: 02.12.2007
Сообщений: 17
По умолчанию

не, оно так вообще прерываться будет по нажатию клавиши, в смысле выходить из режима
shad0w вне форума Ответить с цитированием
Старый 02.12.2007, 17:38   #4
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Вот тут:

Код:
void keyboard(unsigned *x, unsigned *y, unsigned char *man) {
int f;
f = getch();
switch(f)
{
case 72:
draw (++x,y,man); //заменить на draw (++(*x),y,man);
break;

case 80:
draw (x,++y,man); //заменить на draw (x,++(*y),man);
break;

}
}
Carbon вне форума Ответить с цитированием
Старый 02.12.2007, 19:29   #5
shad0w
Пользователь
 
Регистрация: 02.12.2007
Сообщений: 17
По умолчанию

ругается на типы(
type mismatch in parameter 'x' in call to 'draw' in function keyboard
и тоже самое для y
shad0w вне форума Ответить с цитированием
Старый 03.12.2007, 13:25   #6
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Извиняюсь. Не посмотрел на типы.

Код:
void keyboard(unsigned *x, unsigned *y, unsigned char *man) {  
int f;  
f = getch();  
switch(f)  
{  
case 72:  
draw (&(++(*x)),y,man);  
break;  
 
case 80:  
draw (x,&(++(*y)),man);  
break;  
 
}   
}
Carbon вне форума Ответить с цитированием
Старый 06.12.2007, 13:43   #7
Wicing
 
Регистрация: 15.11.2007
Сообщений: 8
По умолчанию

Во первых, что за unsigned x = 150;
unsigned y = 180;

Правильней будет: unsigned "тип" X = 150;
unsigned "тип" Y = 180
;

Во первых, что за unsigned x = 150;
unsigned y = 180;

Правильней будет: unsigned "тип" X=150;
unsigned "тип" Y = 180;

Предупреждение: Пользуйтесь кнопкой редактирования !!!

Последний раз редактировалось merax; 06.12.2007 в 13:54.
Wicing вне форума Ответить с цитированием
Старый 06.12.2007, 17:00   #8
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

unsigned это то же , что и unsigned int.
Carbon вне форума Ответить с цитированием
Старый 06.12.2007, 19:31   #9
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

по стандарту
Код:
unsigned i = 0;
ошибка
(на некоторных компиляторах тоже)

как и
Код:
f()
  {
  return 0;
  }
Alek86 вне форума Ответить с цитированием
Старый 09.12.2007, 03:36   #10
shad0w
Пользователь
 
Регистрация: 02.12.2007
Сообщений: 17
По умолчанию

2Carboon спасибо большое
shad0w вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с указателями в паскале Cartman18 Помощь студентам 3 12.05.2008 09:43
Помогите пожалуйста с динамической памятью и указателями Riddick2013 Помощь студентам 1 19.12.2007 14:41
Проблема с указателями novicer Общие вопросы Delphi 5 17.06.2007 00:21