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

\b and \r are rarely used in practice. I just found out that I misunderstood these two escape sequences. A simple test:

printf("foo\bbar\n");

I expected it to output fobar, because \b will backspace the cursor, and b will overwrite the second o, but instead it outputs: foobar

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

printf("foo\rbar\n");

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

foo
bar
42
В последовательности это ist просто ASCII 8 и 13 CR. Старый умный пульт, возможно, интерпретировал их как команды (см. alse завитки Unix). В общем \r мог бы интерпретироваться как разрыв строки. На самом деле вы нашли два большинство бесполезных знаков.
добавлено автор Joop Eggen, источник
В последовательности это ist просто ASCII 8 и 13 CR. Старый умный пульт, возможно, интерпретировал их как команды (см. alse завитки Unix). В общем \r мог бы интерпретироваться как разрыв строки. На самом деле вы нашли два большинство бесполезных знаков.
добавлено автор Joop Eggen, источник
В последовательности это ist просто ASCII 8 и 13 CR. Старый умный пульт, возможно, интерпретировал их как команды (см. alse завитки Unix). В общем \r мог бы интерпретироваться как разрыв строки. На самом деле вы нашли два большинство бесполезных знаков.
добавлено автор Joop Eggen, источник
@Chris, что действительно \b и \r , делают точно?
добавлено автор Yu Hao, источник
@Chris, что действительно \b и \r , делают точно?
добавлено автор Yu Hao, источник
@suspectus я использовал gcc онлайн compileonline.com/compile_c_online.php
добавлено автор Yu Hao, источник
@suspectus я использовал gcc онлайн compileonline.com/compile_c_online.php
добавлено автор Yu Hao, источник
@suspectus я использовал gcc онлайн compileonline.com/compile_c_online.php
добавлено автор Yu Hao, источник
@YuHao Они don' t делают что-либо. They' ре просто знаки. Но независимо от того, что вы пишете, что те знаки к могли бы действовать определенный путь, когда он принимает те знаки. например, если вы напишете тем знакам файлу, характер закончится в файле. Если вы пишете его терминалу/пульту, терминал мог бы стереть характер, когда это видит \b, Некоторые терминалы сделали бы это, некоторые не будут.
добавлено автор nos, источник
@YuHao Они don' t делают что-либо. They' ре просто знаки. Но независимо от того, что вы пишете, что те знаки к могли бы действовать определенный путь, когда он принимает те знаки. например, если вы напишете тем знакам файлу, характер закончится в файле. Если вы пишете его терминалу/пульту, терминал мог бы стереть характер, когда это видит \b, Некоторые терминалы сделали бы это, некоторые не будут.
добавлено автор nos, источник
на какой платформе вы?
добавлено автор suspectus, источник
на какой платформе вы?
добавлено автор suspectus, источник
stackoverflow.com/questions/6792812/…
добавлено автор ctn, источник
stackoverflow.com/questions/6792812/…
добавлено автор ctn, источник
stackoverflow.com/questions/6792812/…
добавлено автор ctn, источник
Where' s вопрос?
добавлено автор Chris, источник
Where' s вопрос?
добавлено автор Chris, источник

8 ответы

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

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

50
добавлено
вы знаете, как формировать мой, таким образом, это не игнорирует звонок (\a)??
добавлено автор mf_, источник

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

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

50
добавлено
вы знаете, как формировать мой, таким образом, это не игнорирует звонок (\a)??
добавлено автор mf_, источник

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

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

50
добавлено
вы знаете, как формировать мой, таким образом, это не игнорирует звонок (\a)??
добавлено автор mf_, источник

Знаки точно как зарегистрированы - \b равняет к коду символа 0x08 , и \r равняет к 0x0d . Вещь, которая варьируется, состоит в том, как ваш OS реагирует на те знаки. Назад, когда показы пытались подражать старому телетайпу, те действия были стандартизированы, но они менее полезны в современной окружающей среде, и совместимость не гарантируется.

9
добавлено
Стандарт doesn' t говорят, каковы коды символов. \b будет 0x08 , только если 0x08 соответствует символу возврата в наборе символов выполнения (который верен в ASCII и Unicode и других наборах обычного символа). Если ваш набор символов выполнения будет расширенным двоично-десятичным кодом, однако, то то \b нанесет на карту к \0x16 (если я могу доверять таблицам символов I' m нахождение онлайн).
добавлено автор Adrian McCarthy, источник

Знаки точно как зарегистрированы - \b равняет к коду символа 0x08 , и \r равняет к 0x0d . Вещь, которая варьируется, состоит в том, как ваш OS реагирует на те знаки. Назад, когда показы пытались подражать старому телетайпу, те действия были стандартизированы, но они менее полезны в современной окружающей среде, и совместимость не гарантируется.

9
добавлено
Стандарт doesn' t говорят, каковы коды символов. \b будет 0x08 , только если 0x08 соответствует символу возврата в наборе символов выполнения (который верен в ASCII и Unicode и других наборах обычного символа). Если ваш набор символов выполнения будет расширенным двоично-десятичным кодом, однако, то то \b нанесет на карту к \0x16 (если я могу доверять таблицам символов I' m нахождение онлайн).
добавлено автор Adrian McCarthy, источник

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

4
добавлено

Что касается значения каждого характера, описанного в Краткой информации C Плюс, то, что вы ожидали, является 'правильным' ответом. Это должно быть верно для некоторых архитектур ЭВМ и компиляторов, но к сожалению не ваше.

I wrote a simple c program to repeat your test, and got that 'correct' answer. I was using Mac OS and gcc. enter image description here

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

1
добавлено
Пожалуйста, опубликуйте код как код; не изображения
добавлено автор Prateek, источник

I have experimented many of the backslash escape characters. \n which is a new line feed can be put anywhere to bring the effect. One important thing to remember while using this character is that the operating system of the machine we are using might affect the output. As an example, I have printed a bunch of escape character and displayed the result as follow to proof that the OS will affect the output.

0
добавлено
Кодексы должны быть текстом, можно вставить изображения для продукции который can' t быть отправленным здесь, очевидно, как он won' t показывают, как это было бы на местных машинах
добавлено автор Prateek, источник