你好
我正在开展一个需要gotoxy()
功能的项目
我看过gotoxy() implementation for Linux using printf
我想知道为什么
void gotoxy(int x,int y)
{
printf("%c[%d;%df",0x1B,y,x);
}
需要更改printf中的x y顺序,是否只是为了适合坐标系?
按照我的方式,我将其更改为printf("%c[%d;%df",0x1B,x,y)
以满足我的需求
stil,在我使用此gotoxy()
for循环期间,这样:
for( int i = 0; i < 12; i++ ) {
for( int j = 0; j < 12; j++ ) {
gotoxy( i , j );
usleep(500000);
}
}
当i = 0且i = 0时,光标在第一行上 我想知道为什么当i = 1时光标不会进入第二行?
答案 0 :(得分:3)
OP:“为什么需要改变x y顺序”。
光标位置命令的格式为
Force Cursor Position <ESC>[{ROW};{COLUMN}f
出现需要是因为要匹配该格式并将y
变量作为 ROW ,y
首先出现。 (您可以将屏幕旋转90度)。
OP:当i = 1时,为什么光标不会进入第二行? 屏幕左侧上方的起始位置是原点 1 ,列 1
注意:您可以将转义字符放在格式
中printf("\x1B[%d;%df", y, x);
fflush(stdout); // @jxh
答案 1 :(得分:2)
x和y的顺序很重要,因为变量的名称对gotoxy()函数的操作没有意义。
该函数正在输出移动到指定坐标的终端命令序列。当终端看到该命令序列并对其进行处理时,首先是y。
顺便说一下,请小心这个解决方案,因为这高度依赖于运行程序的终端类型。为了获得随机移动的广泛终端支持并在终端屏幕上“绘图”,ncurses
或curses
是您最好的选择。起初他们很难学习。
答案 2 :(得分:1)
使用终端转义序列时,列和行的位置不会从0开始。他们从1开始。
您需要刷新stdout
才能看到光标移动。
void gotoxy(int x,int y)
{
printf("%c[%d;%df",0x1B,y,x);
fflush(stdout);
}
答案 3 :(得分:0)
GotoXY是一个函数或程序,它将光标定位在(X,Y),X在水平方向,Y在垂直方向上相对于当前窗口的原点。原点位于窗口左上角的(1,1)处。