2011-01-09 11 views
24

uscita del seguente programma è: haiRitorno a bordo in C?

Non ho avuto come il ritorno del carrello \r lavora in questo programma e in tempo reale uno può darmi una mano?

#include <stdio.h> 
#include<conio.h> 

void main() 
{ 
    printf("\nab"); 
    printf("\bsi"); 
    printf("\rha"); 
    _getch(); 
} 
+2

[Questo non è l'output che ottengo] (http://codepad.org/669KUYlv) (Almeno una volta ho risolto il 'void main()', e la non comune 'conio.h' roba.) –

+0

I ' m usando l'output di Visual C++ è "hai" –

+0

se metti \ n alla fine di ab come 'ab \ n' otterrai ciò che desideri? – cristian

risposta

55

Da (semantica visualizzazione dei caratteri) 5.2.2/2:

\b (backspace) sposta l'attivo posizione alla precedente posizione riga corrente. Se la posizione attiva è nella posizione iniziale di una riga, il comportamento del dispositivo di visualizzazione non è specificato.

\n (nuova linea) sposta l'attivo posizione alla posizione iniziale riga successiva.

\r (ritorno carrello) sposta l'attivo posizione alla posizione iniziale riga corrente.

Qui, il codice produce:

  • <new_line>ab
  • \b: indietro di un carattere
  • scrittura si: prevale la b con s (producendo asi sulla seconda riga)
  • \r : torna all'inizio della riga corrente
  • scrittura ha: sostituisce i primi due caratteri (che producono hai sulla seconda riga)

Alla fine, l'uscita è:

\nhai 
+0

bt output è "hai" non ahi –

+0

@mr_eclair typo sull'ultima riga: fisso – icecrime

+0

+1 dubbio chiaro. grazie. –

11

programma stampa ab, risale un carattere e stampe si sovrascrivendo b risultante asi. Ritorno a capo riporta il cursore sulla prima colonna della riga corrente.Ciò significa che il ha saranno stampati sopra as e il risultato è hai

+0

+1 ora ho capito grazie –

5

passo-passo:

[newline] ab

ab 

[backspace] si

asi 

[carriage-return] ha

hai 

Ritorno a capo, non causa una nuova riga. In alcune circostanze un singolo CR o LF può essere tradotto in una coppia CR-LF. Questo dipende dalla console e/o dallo stream.