Подтвердить что ты не робот

Использование\b и \r в C

\b и \r редко используются на практике. Я только узнал, что неправильно понял эти две escape-последовательности. Простой тест:

printf("foo\bbar\n");

Я ожидал, что он выведет fobar, потому что \b будет возвращать курсор, а b будет перезаписывать второй o, но вместо этого он выдает: foobar

То же самое с \r:

printf("foo\rbar\n");

Я думал, что \r переместит курсор в начало текущей строки, поэтому bar заменит foo, поэтому окончательный вывод должен быть bar. Однако он фактически выводит:

foo
bar
4b9b3361

Ответ 1

Символы будут посылаться так же, как и на базовое устройство вывода (в вашем случае, вероятно, эмулятор терминала).

Это зависит от реализации терминала, а затем, как эти символы отображаются на самом деле. Например, звонок (\a) может вызвать звуковой сигнал на некоторых терминалах, вспышку экрана на других, или он будет полностью проигнорирован. Все зависит от конфигурации терминала.

Ответ 2

Символы точно такие же, как задокументировано - \b соответствует символьному коду 0x08, а \r соответствует 0x0d. Дело в том, что ваша ОС реагирует на эти символы. Назад, когда дисплеи пытались эмулировать старый телетайп, эти действия были стандартизированы, но они менее полезны в современных средах, и совместимость не гарантируется.

Ответ 3

Интерпретация символов возврата и возврата каретки предоставляется программному обеспечению, которое вы используете для отображения. Терминальный эмулятор при отображении \b перемещает курсор на один шаг назад и при отображении \r в начало строки. Если вы печатаете эти символы в другом месте, например текстовый файл, это программное обеспечение может выбрать. сделать что-то еще.

Ответ 4

Я экспериментировал со многими побегами. \n который является новым переводом строки, может быть помещен куда угодно, чтобы принести эффект. При использовании этого символа важно помнить, что операционная система компьютера, который мы используем, может влиять на вывод. В качестве примера я напечатал несколько escape-символов и отобразил результат в следующем порядке, чтобы доказать, что ОС повлияет на вывод.

Код:

#include <stdio.h>
int main(void){
    printf("Hello World!");
    printf("Goodbye \a");
    printf("Hi \b");
    printf("Yo\f");
    printf("What? \t");
    printf("pewpew");
    return 0;
}

Ответ 5

Что касается значения каждого символа, описанного в C Primer Plus, то, что вы ожидали, является "правильным" ответом. Это должно быть верно для некоторых компьютерных архитектур и компиляторов, но, к сожалению, не для вас.

Я написал простую программу c, чтобы повторить ваш тест и получил этот "правильный" ответ. Я использовал Mac OS и gcc. enter image description here

Кроме того, мне очень любопытно, что такое компилятор, который вы использовали. :)