C 使用printf在Linux上实现gotoxy()
我正在寻找gcc编译器的gotoxy()替代品,发现了这个-C 使用printf在Linux上实现gotoxy(),c,printf,C,Printf,我正在寻找gcc编译器的gotoxy()替代品,发现了这个- void gotoxy(int x,int y) { printf("%c[%d;%df",0x1B,y,x); } 我想知道它是如何工作的,我的意思是我们什么时候在printf中使用[和;,0x1B在那里做什么,它是如何将光标带到带有此代码的行/列的 我从未在书中见过printf的这种用法,所以如果你能给我指一个链接,我可以在那里找到printf的这种用法,那就太好了。这是用来定位光标的 “\x1B”是转义字符,它告诉您的
void gotoxy(int x,int y)
{
printf("%c[%d;%df",0x1B,y,x);
}
我想知道它是如何工作的,我的意思是我们什么时候在printf中使用[
和;
,0x1B
在那里做什么,它是如何将光标带到带有此代码的行/列的
我从未在书中见过printf的这种用法,所以如果你能给我指一个链接,我可以在那里找到printf的这种用法,那就太好了。这是用来定位光标的
“\x1B”
是转义字符,它告诉您的终端接下来的内容不是要打印在屏幕上,而是发送给终端(或最有可能的终端仿真器)的命令
尾随的“f”表示您希望强制光标位于某个位置,由其前面的坐标表示
Force Cursor Position <ESC>[{ROW};{COLUMN}f
强制光标位置[{ROW};{COLUMN}f
因此,如果你调用gotoxy(4,2),它最终会发送转义序列
(ESC)[2;4f”
其中ESC
是字节0x1B
这些被调用,并从1978年引入的显示终端派生出来。这就是一种ANSI转义码。我已经有一段时间没有看到这些代码了。这里有一页解释了它们:
使用
%c
格式化常量似乎不太常见。以下内容是等效的:printf(“\x1b[%d;%df,y,x”);
是的,流行的也是'\033'
。如果我使用%c
格式说明符,我会将其写成27
——我很清楚这是ESC(也称Ctrl-[/code>或).谢谢Jonathon!这真的很有帮助,也很容易理解。我很高兴。我最近不得不对这些转义序列做了很多解释,所以它立刻就吸引了我。顺便说一句,小心使用这种技术。它高度依赖于程序运行的终端类型。并非所有终端模拟器都会给出相同的结果类似于这样的序列。@user2532621理解。这就是诅咒和termcap的作用。然而,我回答的是相反的问题:“这个实现在做什么?”而不是“我如何实现它?”