Перейти к предыдущей строке после scanf () в C - PullRequest
0 голосов
/ 30 сентября 2018

Рассмотрим этот код:

#include<stdio.h>

void main()
{
    char a;
    printf("scan: ");
    scanf("%c",&a);
    printf("\b back");
}

После того, как пользователь нажмет Enter и заставит курсор опуститься, я хочу переместить его обратно вверх, чтобы я мог напечатать слово «назад», переписав слово «сканирование»,Как мне это сделать?

1 Ответ

0 голосов
/ 30 сентября 2018

Вы можете использовать escape-последовательности ANSI: \033[<N>A, где <N> будет количеством строк, которое вам нужно увеличить (в данном случае одну), поэтому код будет выглядеть так:

#include<stdio.h>

main(void) {
    char a;
    printf("scan: ");
    scanf("%c",&a);
    printf("%c[1A back", 033);
}

Кроме того, вы не должны объявлять main как void.Обратите внимание, что escape-последовательности не будут работать в некоторых терминалах (например, Windows cmd.exe или DOS без установленного ANSI.SYS).

system("cls") будет наихудшим способом решения проблемы, и установка только ncursesпереместить курсор вверх - это полное излишество, потому что у вас всегда есть это простое решение, которое я представил выше.

Всякий раз, когда вы захотите узнать больше о escape-последовательностях ANSI, отметьте this .Если вы хотите перемотать курсор до конца строки, отметьте это:

#include<stdio.h>

main(void) {
    char a;
    printf("scan: ");
    scanf("%c",&a);
    printf("%c[1Ascan: %c back", 033, a);
}

Вы должны воссоздать содержимое строки, хотя.Но это не должно быть слишком проблематично.Это можно упростить, если использовать расширенные управляющие последовательности ANSI, которые вы можете проверить по приведенной ссылке.

...