C++gotoxy退出控制台
C++ gotoxy out of console
我在使用gotoxy()时遇到了一个小问题。我想否认这种可能性,即gotoxy()绕过控制台或转到(-x,-y)。
void gotoxy(int x, int y) {
if (x >= 0 && y >= 0) {
getch();
COORD kursor;
kursor.X = x;
kursor.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), kursor);
}
}
和:
void chodzenie(){
koniec = false;
while( koniec == false ){
unsigned char znak = getch();
switch( znak )
{
case 0:
case 224: //klawisze specjalne
znak = getch();
switch( znak )
{
case 72: //strzałka w górę
y--;
gotoxy(x,y);
break;
case 80: //strzałka w dół
y++;
gotoxy(x,y);
break;
case 75: //strzałka w lewo
x--;
gotoxy(x,y);
break;
case 77: //strzałka w prawo
x++;
gotoxy(x,y);
break;
}
znak = 0;
break;
case 13: //ENTER
break;
case 27: //ESC
koniec = true;
break;
}
}
}
尽管如此,即使我有,如果它检查y和x是否大于0,我的cousor实际上可能会去——比方说(-1,-6)。
如何防止无效索引
您使用的代码如:
y--; or x++;
以计算新的光标位置。
您可以避开int运算符,并实现一个小函数来将值调整到所需的方向,并限制结果。(到边缘,或者你可能会选择包装
考虑这个边缘约束的例子:(使用顶部、底部作为屏幕限制)
void bmpY (int& y, int direction)
{
y += direction;
// check bottom limit (increasing Y moves down)
if (direction > 0) { if (y > BOTTOM) y = BOTTOM; return; }
if (direction < 0) { if (y < TOP) y = TOP; return; }
// else direction == 0, do nothing
}
并为bmpX、LEFT、RIGHT 实现类似的功能
类似的简单算法可以处理换行选择。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- C++:将控制台输出存储在宏中更好吗
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- C++控制台应用程序阻止退出
- 防止Visual Studio C++控制台立即退出,而无需系统("pause")或额外的获取
- 在C++中添加while循环以继续或退出控制台
- Windows 控制台应用 (C++) 具有错误的退出代码
- 控制台应用程序立即在 Visual Studio 中退出
- 在c++/cli控制台应用程序中处理停止或退出事件
- C++ 在退出 WINAPI 之前将控制台输出保存到文本文件(无 MFC)
- C++gotoxy退出控制台
- C++应用程序控制台未退出
- C++控制台未按预期退出
- 如果你的程序在运行时几乎立即退出,如何确保控制台窗口保持打开状态以读取输出
- 完成输出后,控制台应用程序退出.如何让它再次要求输入
- 关闭控制台而不退出
- 控制台程序退出