2011-01-09 5 views
24

sortie du programme suivant est: haiRetour chariot en C?

Je n'ai pas comment le retour chariot \r travaille dans ce programme et en temps réel peut me aider?

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

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

[Ce n'est pas la sortie que j'obtiens] (http://codepad.org/669KUYlv) (Au moins une fois que je répare le 'void main()', et le truc 'conio.h' non standard.) –

+0

I ' m en utilisant Visual C++ sortie est "hai" –

+0

si vous mettez \ n à la fin de ab comme 'ab \ n' obtiendrez ce que vous désirez? – cristian

Répondre

55

De 5.2.2/2 (sémantique d'affichage de caractère):

\b (backspace) déplace la position active à la position précédente sur la ligne courante. Si la position active est à la position initiale de une ligne, le comportement du dispositif d'affichage n'est pas spécifié.

\n (nouvelle ligne) déplace la position active à la position initiale de la ligne suivante.

\r (retour chariot) déplace la position active à la position initiale de la ligne courante.

Ici, votre code produit:

  • <new_line>ab
  • \b: retour d'un caractère
  • écriture si: remplace la b avec s (production asi sur la deuxième ligne)
  • \r : retour au début de la ligne en cours
  • écriture ha: remplace les deux premiers caractères (produisant hai sur la deuxième ligne)

En fin de compte, la sortie est:

\nhai 
+0

sortie bt est "hai" pas ahi –

+0

@mr_eclair faute de frappe sur la dernière ligne: fixe – icecrime

+0

+ 1 doute clair. Je vous remercie. –

11

impressions de programme ab, remonte d'un caractère et des impressions si écraser le b résultant asi. Le retour chariot renvoie le signe d'insertion à la première colonne de la ligne en cours.Cela signifie que le ha sera imprimé sur as et le résultat est hai

+0

+1 maintenant je l'ai eu merci –

5

étape par étape:

[NEWLINE] ab

ab 

[backspace] si

asi 

[chariot-retour] ha

hai 

Retour chariot, ne provoque pas de retour à la ligne. Dans certaines circonstances, un seul CR ou LF peut être traduit en une paire CR-LF. Ceci dépend de la console et/ou du flux.