在用C语言写控制台的程序时,说到控制光标,我们通常就是回车换行或者空格之类的进行移动光标控制,但是这类操作只能是将光标移动到当前光标后面的位置,而且效率极低
假设我们想要把光标移动到当前光标以前某个位置进行修改,我们通常的就是 system("cls")清屏,然后再重新打印到屏幕,这种操作方式虽然可以达到修改当前光标以前位置的效果,但是这种方法也是效率极低
其实在C中有专门的函数来实现 我们控制光标在屏幕指定位置的操作,在MSDN中我们可以找到这个函数
BOOL WINAPI SetConsoleCursorPosition( _In_ HANDLE hConsoleOutput, _In_ COORD dwCursorPosition );
SetConsoleCursorPosition函数有两个参数,前一个参数为 标准输出的 句柄
在这里可能我们不知道这个标准输出的句柄从哪来,在MSDN中也是有专门的函数来获取标准输出,标准输入,标准错误输出的句柄
而后一个参数COORD其实就是一个想包含x,y的一个类似于坐标的结构体
typedef struct _COORD {
SHORT X;
SHORT Y;
} COORD, *PCOORD;
通过这个函数我们就可以把光标设置到坐标为(X,Y)的地方
所以这里就有必要提到在控制台中X,Y构成的坐标
在这里的XY坐标系不同于我们数学中见到的直角坐标系,它是以左上角为坐标原点(0,0),x轴向右延伸,y轴向下延伸,以字符为单位
假如我们在一些项目中需要经常进行光标位置的设置,我们也可以自己打包写一个函数来达到光标控制的效果
static void SetPos(int x, int y)
{
COORD point = { x, y };//光标要设置的位置x,y
HANDLE HOutput = GetStdHandle(STD_OUTPUT_HANDLE);//使用GetStdHandle(STD_OUTPUT_HANDLE)来获取标准输出的句柄
SetConsoleCursorPosition(HOutput, point);//设置光标位置
}
这样我们就得到了一个SetPos函数,我们只需要传入(x,y)就可以设置光标到指定位置