1、坐标函数的定义和使用
其实C中没有这个坐标函数,所以要自己定义,而自己定义就不一定叫gotoxy(),moveto()或position()等等自己起什么名字都可以。
首先是嵌入相关头文件的指令:#include<windows.h>
然后在主函数外定义此坐标函数,像这样:
void gotoxy(int x,int y)
{
COORD p ;
p.X=x;
p.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}
或
void gotoxy(int x,int y)
{
COORD p={x,y};//p是一个结构体可这样赋值,有的编译器可能报错但可以运行。
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}
或
void gotoxy(int x, int y)
{
COORD pos;
HANDLE output;
pos.X = x;
pos.Y = y;
output = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(output, pos);
}
最后在主函数内再声明一下就行了,如:
#include<stdio.h>
#include<windows.h>
int main()
{
int i=5;
void gotoxy(int x,int y);//主函数内声明函数。
gotoxy(1,4);
printf("%d",i);
gotoxy(1,i);
printf("%d",i);
return 0;
}
void gotoxy(int x,int y)
{
COORD p ;
p.X=x-1;
p.Y=y-1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}
或者主函数内不声明也行,把坐标函数放到主函数前面,如:
#include<stdio.h>
#include<windows.h>
void gotoxy(int x,int y)
{
COORD p ;
p.X=x-1;
p.Y=y-1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}
int main()
{
int i=5;
gotoxy(4,4);
printf("%d",i);
gotoxy(i,i);
printf("%d",i);
return 0;
}
2、坐标函数各部分释义
整个gotoxy()函数涉及两个数据类型类型和两个函数:
1、COORD是Windows API中定义的一种结构。其实就是一种用结构体定义的数据类型,内含两个X、Y用来表示坐标。
2、HANDLE是一个通用句柄表示。(句柄是什么大家有兴趣的可以自行去了解)
3、GetStdHandle是一个Windows API函数。它用于从一个特定的标准设备(标准输入、标准输出或标准错误)中取得一个句柄,参数可以是以下值之一:
值 | 含义 |
---|---|
STD_INPUT_HANDLE | 标准输入的句柄 |
STD_OUTPUT_HANDLE | 标准输出的句柄 |
STD_ERROR_HANDLE | 标准错误的句柄 |
4、SetConsoleCursorPosition是API中的函数,作用是定位光标位置。SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
语句的意思就是:定位光标位置的函数,坐标为GetStdHandle()返回标准的输出的句柄,也就是获得输出屏幕缓冲区的句柄,并赋值给对象p。
3、坐标函数的特点和灵活运用
COORD p ;
p.X=x;
p.Y=y;
其中p.X是横坐标,方向向右;p.Y是纵坐标,方向向下。gotoxy(0,0)就表示左上角的开头位置。
如果这样定义:
COORD p ;
p.X=x-1;
p.Y=y-1;
输入gotox(1,1),就转换为p.X=0,p.Y=0,还是表示开头位置。
如果配合二维数组使用,可以交换x、y位置,如:
COORD p ;
p.X=y;
p.Y=x;
输入gotoxy(i,j)就可以很好对应相应数组的位置。