Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用printf在Linux上实现gotoxy()_C_Printf - Fatal编程技术网

C 使用printf在Linux上实现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”是转义字符,它告诉您的

我正在寻找gcc编译器的gotoxy()替代品,发现了这个-

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的作用。然而,我回答的是相反的问题:“这个实现在做什么?”而不是“我如何实现它?”