2013-10-09 30 views
-4

我有這兩個代碼段:關於給printf用C

int main(void) 
{ 
    printf("\nab"); 
    printf("\bsi"); 
    printf("\rha"); 
    return 0; 
} 

對於第一個的輸出爲hai。但是,如果我寫它,而不是這樣:

int main(void) 
{ 
    printf("\nab"); 
    printf("\bsi"); 
    printf("\rsha"); 
} 

導致輸出僅僅是sha。這裏發生了什麼? (另外我使用gcc

+6

@zakinster上述一個精確複製粘貼! – devnull

+0

如果您瞭解第一種情況,您會理解第二種情況。在其他帖子中查看答案。 – zakinster

+0

爲什麼不關閉它? – Annabelle

回答

1

1)

printf("\nab"); 

它顯示ab

printf("\bsi"); 

\b刪除最後一個字符(\b =退格鍵)。然後你追加si

它顯示asi

printf("\rha"); 

\r返回行(\ R =回車)的開始。然後你打印ha。因此你因此擦除的asi

第一2個字符,它顯示hai

2)

進行第2個步驟相同的解釋。

在第三步中,您將返回到行的開頭並使用\r並打印3個字符,擦除預先存在的3個字符。

0

簡短說明:

\n = moves to next line 
\b = backspace - deletes 1 char 
\r = moves cursor to 1st column of the line 

等你拿

ab 
asi //for \bsi 
hai // for \rha