簡體   English   中英

在終端輸出C語言中移動光標

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM