[英]Moving cursor in the terminal output C language
目前我發現我可以在終端輸出中移動光標,就像我在 Word 中使用 "\\033[A" 將光標移動到上面的行和 "\\033[B" 到下面一樣。 所以我試圖理解更多的東西,我用 C 寫了這兩行代碼:
#include <stdio.h>
#include <stdlib.h>
int main (){
printf("\n 2 3 \033[A \033[D 1 \033[B \n 4 5 6");
}
這是輸出:
1
2 3
4 5 6
我的期望不同,因為這是我的預期輸出
1
2 3
4 5 6
所以我遺漏了一些信息,我認為可能我需要一個字符說“回到一個位置”,比如“\\t”,但相反。 我在一些舊帖子中找到了這個頁面這里
但是有些字符不起作用。 有人可以解釋我這些東西是如何工作的嗎? 因為我試過 "\\033[C" 和 "\\033[D" 左右移動但沒有。
這些序列被稱為 ANSI 轉義序列,可以追溯到 1970 年代的 DEC VT-100 終端,因此它們有時仍被稱為 VT-100 轉義序列。 這里和這里有一個列表。
您感興趣的代碼是:
Esc[ValueA Move cursor up n lines CUU
Esc[ValueB Move cursor down n lines CUD
Esc[ValueC Move cursor right n lines CUF
Esc[ValueD Move cursor left n lines CUB
您可能沒有考慮到的一件事是,這些動作並不關心給定線路上的“信息量”; 他們只是將屏幕視為字符網格。 所以 ESC[A 直線上升一行,即使它“越過前一行的末尾”。 等等。
所以要向上移動一行並留下兩個字符:
printf("\033[A\033[2D");
\\033
是 ESC 的 ASCII 代碼(八進制——有時你會在十六進制中看到它作為\\x1b
;同樣的事情)。 不要添加任何額外的空格或換行符; 直接打印代碼即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.