переместить курсор в С++, используя gotoXY и kbhit

Я хочу переместить позицию символа «А» в терминале с помощью следующего кода на С++, но терминал закрывается и кажется, что он не входит в цикл for. Я не знаю, где я ошибаюсь. Буду признателен, если вы мне поможете:

'w' должен переместить его вверх 's' должен переместить его вниз 'a' и 'd' вправо и влево

 #include <iostream>
 #include <conio.h>
 #include <string>
 #include <Windows.h>
 using namespace std;

 void goToXY(int x=0,int y=0)
 {
     HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE);
     COORD c;
     c.X=x;
     c.Y=y;
     SetConsoleCursorPosition(h,c);
 }

 int main()
 {

     char symbol='A';
     int X=0, Y=0;

     goToXY(X,Y);
     cout<<symbol;

     for(;;)
     {
         if(kbhit())
         {
             char ch = getch();
             switch(ch)
             {
             case 'w':
                 goToXY(X,Y-1);
                 cout<<symbol;

             case 's':
                 goToXY(X,Y+1);
                 cout<<symbol;

             case 'a':
                 goToXY(X-1,Y);
                 cout<<symbol;

             case 'd':
                 goToXY(X+1,Y);
                 cout<<symbol;
             }
         }

         getch();
         return 0;
    }    
}

person SRYZDN    schedule 10.09.2014    source источник


Ответы (2)


1) Вы забыли добавить break; после каждого case-тела.

2) И вы поместили return 0; в тело for-цикла, поэтому ваша программа останавливается после первой итерации.

Попробуй это:

for(;;)
{
      if(kbhit())
      {
           char ch = getch();
           switch(ch)
           {
           case 'w':
               goToXY(X,Y-1);
               cout<<symbol;
               break;
           case 's':
               goToXY(X,Y+1);
               cout<<symbol;
               break;
           case 'a':
               goToXY(X-1,Y);
               cout<<symbol;
               break;
           case 'd':
               goToXY(X+1,Y);
               cout<<symbol;
               break;
          }
     }
}
getch();
return 0;
person Ilya    schedule 10.09.2014

Вы не использовали перерыв; оператор после каждого case в вашем операторе switch. Надеюсь это поможет.

switch(ch)
               {
               case 'w':
                   goToXY(X,Y-1);
                   cout<<symbol;
                   break;
               case 's':
                   goToXY(X,Y+1);
                   cout<<symbol;
                   break;
               case 'a':
                   goToXY(X-1,Y);
                   cout<<symbol;
                   break;
               case 'd':
                   goToXY(X+1,Y);
                   cout<<symbol;
                   break;
               }
person You_Shall_Not_Pass    schedule 10.09.2014
comment
Спасибо всем за быстрые ответы - person SRYZDN; 10.09.2014