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

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

‘W’ должен переместить его вверх
‘s’ должен сдвинуть его вниз
«а» и «г» направо и налево

 #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;
}
}

0

Решение

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

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

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

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;
0

Другие решения

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

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;
}
-1

По вопросам рекламы [email protected]