Question Différence entre \ n et \ r?


Quelle est la différence entre \n (nouvelle ligne) et \r (retour chariot)?

En particulier, y a-t-il pratique différences entre \n et \r? Y a-t-il des endroits où l'un devrait être utilisé à la place de l'autre?


445
2017-11-19 05:20


origine


Réponses:


En termes de code ascii, c'est 3 - puisqu'ils sont respectivement 10 et 13 ;-).

Mais sérieusement, il y en a beaucoup:

  • dans Unix et tous les systèmes de type Unix, \n est le code de fin de ligne, \r signifie rien de spécial
  • en conséquence, en C et dans la plupart des langues qui le copient (même à distance), \n est la séquence d'échappement standard pour la fin de ligne (traduite vers / à partir de séquences spécifiques au système d'exploitation si nécessaire)
  • dans les anciens systèmes Mac (pré-OS X), \r était le code de fin de ligne à la place
  • dans Windows (et de nombreux anciens systèmes d'exploitation), le code de fin de ligne est 2 caractères, \r\n, dans cet ordre
  • en conséquence (surprenante ;-) (en revenant sur les OS bien plus anciens que Windows), \r\n est la terminaison de ligne standard pour les formats de texte sur Internet
  • pour les "terminaux" électromécaniques de type télétype, \r ordonne au chariot de reculer à gauche jusqu'à ce qu'il atteigne l'arrêt le plus à gauche (opération lente), \n commande le rouleau pour enrouler une ligne (une opération beaucoup plus rapide) - c'est la raison pour laquelle vous avez toujours \r  avant  \n, pour que le rouleau puisse bouger pendant que le chariot roule toujours à gauche! -)
  • pour les terminaux en mode caractère (émulant généralement les plus anciens comme ci-dessus), en mode brut, \r et \n agir de la même façon (sauf les deux en termes de curseur, car il est pas de calèche ni de rouleau ;-)

En pratique, dans le contexte moderne d'écriture dans un fichier texte, vous devez toujours utiliser \n (le runtime sous-jacent traduira cela si vous êtes sur un OS bizarre, par exemple, Windows ;-). La seule raison d'utiliser \r Si vous écrivez dans un terminal de caractères (ou plus probablement une "fenêtre de console" en train de l’émuler) et que vous écrivez la ligne suivante pour écraser la dernière que vous venez d’écrire barres) - cela devient assez obsolète dans un monde d'interfaces graphiques, cependant ;-).


638
2017-11-19 05:29



Historiquement un \n a été utilisé pour déplacer le chariot vers le bas, tandis que le \r a été utilisé pour déplacer le chariot vers le côté gauche de la page.


98
2017-11-19 05:26



Deux personnages différents.

\n est utilisé comme terminateur de fin de ligne dans les fichiers texte Unix

\r est utilisé comme terminateur de fin de ligne dans les fichiers texte Mac

\r\n (c'est-à-dire les deux) sont utilisés pour terminer les lignes dans les fichiers texte Windows et DOS.


26
2017-11-19 05:24



Comme personne d'autre ne l'a mentionné spécifiquement (sont-ils trop jeunes pour savoir / se souvenir?) - Je soupçonne l'utilisation de \r\n originaire de machines à écrire et d'appareils similaires.

Lorsque vous vouliez une nouvelle ligne en utilisant une machine à écrire multi-ligne, il y avait deux actions physiques à effectuer: faites glisser le chariot au début (à gauche, en US) de la page, et faites avancer le papier d'un cran .

À l'époque des imprimantes en ligne, le seul moyen de faire du texte en gras, par exemple, était de faire un retour chariot SANS une nouvelle ligne et d'imprimer les mêmes caractères sur les anciens, ajoutant ainsi de l'encre. . Lorsque la fonction mécanique de "nouvelle ligne" échouait dans une machine à écrire, c'était le résultat ennuyeux: vous pouviez taper sur la ligne de texte précédente si vous ne faisiez pas attention.


17
2018-01-20 20:29



Deux caractères différents pour différents systèmes d'exploitation. Cela joue également un rôle dans les données transmises sur TCP/IP ce qui nécessite l'utilisation de \r\n.

\n Unix

\r Mac

\r\n Windows et DOS.


11
2017-11-19 05:28



Compléter,

Dans un script shell (bash), vous pouvez utiliser \r pour envoyer le curseur, en face sur la ligne et, bien sûr \n mettre le curseur sur une nouvelle ligne.

Par exemple, essayez:

echo -en "AA--AA" ; echo -en "BB" ; echo -en "\rBB"
  • Le premier affichage "echo" AA--AA
  • La deuxième : AA--AABB
  • Le dernier : BB--AABB

Mais n'oublie pas d'utiliser -en en tant que paramètres.


7
2018-01-30 10:31



Dans Windows, le \ n se déplace au début de la ligne suivante. Le \ r se déplace au début de la ligne en cours, sans passer à la ligne suivante. J'ai utilisé dans mes propres applications de console où je suis en train de tester du code et je ne veux pas voir le texte défiler sur mon écran, donc plutôt que d'utiliser \ n après avoir imprimé du texte, par exemple, une fréquence d'images FPS), je vais imprimer ("% - 10d \ r", fps); Cela ramènera le curseur au début de la ligne sans descendre à la ligne suivante et me permettre d'avoir d'autres informations sur l'écran qui ne défilent pas pendant que le framerate se met constamment à jour sur la même ligne (le% -10 fait certain que la sortie est au moins de 10 caractères, justifiée à gauche de sorte qu'elle finisse par être complétée par des espaces, remplaçant toutes les anciennes valeurs pour cette ligne). C'est assez pratique pour des choses comme ça, généralement quand j'ai déboguer des choses sur mon écran de console.

Un peu d'histoire

Le / r signifie "retour" ou "retour chariot" qui doit son histoire à la machine à écrire. Un retour chariot a déplacé votre voiture tout le chemin vers la droite, donc vous étiez en train de taper au début de la ligne.

Le / n signifie "nouvelle ligne", encore une fois, à partir des jours de machine à écrire vous avez descendu à une nouvelle ligne. Ce n'est pas nécessairement le cas au départ, ce qui explique pourquoi certains systèmes d'exploitation ont besoin à la fois d'un retour / r suivi d'une nouvelle ligne / n, comme c'était le cas dans une machine à écrire. avoir "Return" plutôt que "Enter", de "retour chariot", qui était familier.


3
2018-01-11 01:41



#include <stdio.h>

void main()
{
  int countch=0;
  int countwd=1;

  printf("Enter your sentence in lowercase: ");
  char ch='a';
  while(ch!='\r')
  {
    ch=getche();
    if(ch==' ')
      countwd++;
    else
      countch++;
  }

  printf("\n Words = ",countwd);

  printf("Characters = ",countch-1);

  getch();

}

Prenons cet exemple essayez de mettre \ n à la place de \ r cela ne fonctionnera pas et essayez de deviner pourquoi?


0
2018-03-10 00:49