因为用到了 Windo光标定位需要使用 windows.h 头文件中的SetConsoleCursorPosition
函数,它的使用方式为:
SetConsoleCursorPosition(HANDLE hConsoleOutput, COORD dwCursorPosition);
hConsoleOutput
表示控制台缓冲区句柄,可通过GetStdHandle(STD_OUTPUT_HANDLE)
来获得;dwCursorPosition
是光标位置,也就是第几行第几列,它是 COORD 类型的结构体。ws 操作系统的功能,所以本节的代码不能在 Linux 和 Mac OS 下运行。
例如,将光标定位到控制台的第3行第3列:
//定义光标位置
COORD coord;
coord.X = 3; //第3行
coord.Y = 3; //第3列
//获取控制台缓冲区句柄,固定写法
HANDLE ConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
//设置光标位置,固定写法
SetConsoleCursorPosition(ConsoleHandle, coord);
#include <stdio.h>
#include <windows.h>
int main(){
//定义光标位置
COORD coord;
coord.X = 3; //第3行
coord.Y = 3; //第3列
//获取控制台缓冲区句柄
HANDLE ConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
//设置光标位置
SetConsoleCursorPosition(ConsoleHandle, coord);
printf("http://c.biancheng.net\n");
return 0;
}
运行结果:
注意:窗口的左上角是第 0 行第 0 列,而不是我们通常所认为的第 1 行第 1 列。编程语言中的很多计数都是从 0 开始的,而不是从 1 开始。
#include <stdio.h>
#include <windows.h>
//设置光标位置
void setCursorPosition(int x, int y);
//设置文字颜色
void setColor(int color);
int main(){
setColor(3);
setCursorPosition(3, 3);
puts("★");
setColor(0XC);
setCursorPosition(1, 1);
puts("◆");
setColor(6);
setCursorPosition(6, 6);
puts("■");
return 0;
}
//自定义的光标定位函数
void setCursorPosition(int x, int y){
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
//自定义的文字颜色函数
void setColor(int color){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color) ;
}