Перемещение курсора на вывод терминала C язык - PullRequest
0 голосов
/ 17 марта 2020

В настоящее время я обнаружил, что могу перемещать курсор в выводе терминала, как будто я пишу в Word, используя "\ 033 [A" для перемещения курсора в строке выше и "\ 033 [B" ниже. Поэтому я попытался понять что-то еще, и я написал эти 2 строки кода в 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

Так что мне не хватает некоторой информации, и я думаю, что, вероятно, мне нужен персонаж, который говорит "go назад на одну позицию", как "\ t", но наоборот. Я нашел эту страницу в некоторых старых сообщениях Здесь

Но некоторые символы не работают. Может кто-нибудь объяснить мне, как эти вещи работают? Потому что я пытался "\ 033 [C" и "\ 033 [D" перемещаться вправо и влево, но ничего.

1 Ответ

1 голос
/ 17 марта 2020

Эти последовательности называются последовательностями выхода ANSI и датируются 1970-ми годами с помощью терминала DE C VT-100, поэтому их иногда называют escape-последовательностями 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 - это код ASCII для ES C (в восьмеричном - иногда вы увидим это в шестнадцатеричном виде как \x1b; тоже самое). Не добавляйте лишние пробелы или новые строки; просто распечатайте коды напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...