Почему "\ r" удаляет мою предыдущую напечатанную строку, а "\ r" - нет - PullRequest
3 голосов
/ 11 июля 2019

Когда я печатаю некоторую строку, если я хочу перезаписать, например, первый символ, я использую \r, потому что это символ возврата каретки, но он печатает только один символ после этого, вся моя строка перезаписывается.

Это код, который я сделал для этого вопроса.

#include <stdio.h>

int main(){

    printf("-------");
    printf("\r ");
    return 0;

}

, используя этот код, мой вывод: с одним пробелом.

Теперь я немного изменилкод.Единственное изменение состоит в том, что в моем втором printf я удаляю пробел после \r

#include <stdio.h>

int main(){

    printf("-------");
    printf("\r");
    return 0;

}

, используя этот второй код, мой вывод "-------" (без кавычек)

мой ожидаемыйвывод: " ------"

Почему это не работает?

1 Ответ

9 голосов
/ 11 июля 2019

\r - возврат каретки. Он отправляет "каретку" (курсор, в наше время) обратно в начало той же строки. Само по себе ничего не стирает - просто перемещает курсор. Очевидно, ваш терминал работает так, что печать символа в начале строки стирает остальную часть строки. Это не гарантировано, я думаю.

Во многих системах, если вы хотите очистить текущую строку, вы должны вывести \r, а затем столько пробелов, сколько в строке есть символы.

...