2013-08-07 3 views
5

Я новичок в языке программирования C, недавно я изучил около escape-последовательность.Escape последовательности производят неожиданный вывод в C

\n means newline 
\b means backspace 
\r means carriage-return 

Когда я подаю их на следующей программе, то я получаю выход в хаи, Может кто-нибудь, пожалуйста, объясните, как?

main() 
{ 
    printf("\nab"); 
    printf("\bsi"); 
    printf("\rha"); 
} 
+1

Ваше предположение не может быть правдой, и выход может изменяться, см. [Использование \ b и \ r в C] (http://stackoverflow.com/q/17236242/1009479) –

ответ

12

\r фактически возврат каретки (который принимает курсор в начало строки).

Ваша программа выводит новую строку (\n), за которой следует «ab», затем backspace (\b) (над буквой b) «si», поэтому теперь у вас есть «asi» на экране.
\r берет курсор к началу строки, а затем выводит «ha», оставляя «hai» на экране.

2

No, '\r' is не linefeed, '\n' есть на самом деле перевод строки. Просто случается так, что многие современные системы используют '\n' как возврат линии, так и возврат каретки, что делает ее «новой строкой».

'\r' is возврат-возврат, который возвращает курсор к началу строки.

4

Первого printf напечатает ab затем \b сделает забой и распечатать si так что ваши окончательные печати становится asi.

Сейчас в последнем \r переместит курсор в начало и гравюр ha который заменит два первых символа и делает конечную строку как hai (ha из последнего заявления и i с предыдущим результатом.)

5

Первая команда напечатает ab на новой линии (\n):

>ab 

Вторая инструкция сделает забой (\b) перед печатью si:

>asi 

Затем последний сделает возврат каретки (\r) перед печатью ha:

>hai 
3

Потому что вы пишете все на той же линии, после первого \n: Статус

printf("\nab"); // -> ab on a new line 

Line: ab

printf("\bsi"); 

Это означает ab минус b из-за backspace, затем вы добавляете si в линию.

Строка состояния: asi

Наконец:

printf("\rha"); 

означает, что вы идете назад в начале строки и писать ha.

Это ведет к hai.


\r является возврат каретки, не перевода строки.

1

\ b предназначен для использования в обратном пространстве. То есть, он удаляет персонажа только что написанного.
\ r - вернуть курсор влево в самое основное положение в текущей строке .


Пусть г представляет курсор.
После заявления один.

\n 
abz 

Послепродолжительность.

az 

После заявления два.

asiz 

После возвращения.

zbi 

После заявления три

haiz

0

Здесь в вашем коде

  1. \ г

    \r means Carriage Return, which means: return the cursor to the beginning of the line in more simple words we can say that it's deleting each character from the active position upto the beginning. 
    
  2. \ п

    \n mean New Line 
    
  3. \ б

    \b mean Backspace 
    

Давайте это один шаг за один раз:

<new line>ab<backspace>si<carriage return>ha 

Во-первых, обрабатывать забой. Обратите внимание, что несмотря на то, что это «не Стирание», следующий символ, который будет выводиться затирает что backspaced над:

<new line>asi<carriage return>ha 

Теперь, возврат каретки означает вернуться в начало строки. Таким образом, «га» переписывает «как» в «аси:.

<new line>hai 

Теперь курсор в настоящее время сидит на I, так что следующий символ должен быть выведен затирает I

Смежные вопросы