我已经在我的课程中读到,gotxy()是一个预定义的函数,但它不适用于Microsoft Visual 2013.so我做了一些搜索,我得到了那段工作的代码,但我必须理解它。所以任何人都可以详细解释它。
void gotoxy(int x, int y)
{
HANDLE hConsoleOutput;
COORD dwCursorPosition;
cout.flush();
dwCursorPosition.X = x;
dwCursorPosition.Y = y;
hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hConsoleOutput, dwCursorPosition);
}
答案 0 :(得分:4)
你的课程资料已经过时了大约30年,我认为,目标是DOS,甚至不是Windows 1.0。
无论如何,你现在拥有的功能是一个仍然适用于现代Windows系统的实现,即使它已经过时了大约20年。
第一行定义HANDLE hConsoleOutput;
。它无法初始化变量,应该这样做:HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
。稍后需要此句柄。
第二行定义坐标位置COORD dwCursorPosition;
。同样的问题,它应该已经初始化:COORD dwCursorPosition = { x,y };
cout.flush()
确保在调用之前的所有旧输出都写在旧的光标位置。
接下来的三个陈述是修复未初始化的变量,如果做得恰当,则不应该是必要的。最后,最后一次调用确实告诉了Windows下一步要打印的位置。