deepblue : tu confonds (un peu) avec les codes ascii et la représentation standard des retours à la ligne sous les différents système d'exploitation.
Il y a deux caractères qui, historiquement (du temps des premières imprimantes et des telescripteurs qui étaient controllées directement par des codes ascii), servaient aux retours à la ligne :
- le caractère 10 (en décimal) ou Line Feed (LF)qui fait avancer la feuille d'une ligne.
- le caractère 13 ou Carriage Return (CR), qui renvoie la curseur au début de la ligne.
Donc à cette époque, pour "aller à la ligne" il faut faire soit CR puis LF soit LF puis CR.
Ensuite, de nos jours, l'important c'est la manière dont les logiciels interprètent et affichent ces codes qui compte. Sous windows, les programmes attendaient générallement les caractère CR puis LF pour afficher un retour à la ligne. Sous linux, les programmes ne s'attendait qu'à voir le caractère LF pour afficher un retour à la ligne (mais aujourd'hui, beaucoup de programmes sont assez souples avec ce genre de chose).
D'un autre coté, les caractères spéciaux en C '\n' et '\r' sont un peu orthogonaux car ils ne spécifient pas un code ascii particulier, mais une fonctionnalité particulière. Lorsque '\n' est affiché dans un terminal, le curseur doit aller au début de la ligne suivante et lorsque le caractère '\r' est affiché le curseur doit aller au début de la ligne courante. Indépendamment de la représentation de cette action.
Par exemple, sous windows, bien que le retour à la ligne prennent deux caractères, '\n' est quand même un seul "char".