如何在C/C++中定义坐标函数gotoxy()并灵活运用之

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)就可以很好对应相应数组的位置。

猜你喜欢

转载自blog.csdn.net/m0_46606140/article/details/106745945
今日推荐