Autant c´est mal, très mal, d´utiliser cout<<´\n´, autant c´est bien, très bien, d´utiliser cout<<endl, et je m´explique
Tout d´abord, bien comprendre la différence entre tois choses : ´\n´ ( charactère 13), " \r\n" ( caractère 10 suivi du caractère 13), et les sauts de ligne.
Sur les systèmes de type GuyLux ( *nix, *inux), une fin de ligne se marque par le simple ´\n´, tandis que sous Win, une fin de ligne se décompose en " ramène le charriot" soit ´\r´ puis " descend d´une ligne" soit ´\n´. Bien souvent les programmes réalisent la conversion ( edit, word), mais pas tout le temps ( notepad).
La fonctionnalité " saut de ligne" n´est donc pas le même selon où on compile son programme.
De plus, il faut bien comprendre que endl est un manipulateur, pas un simple macro définissant la manière de sauter une ligne ( ´\n´ ou " \r\n"). On peut l´appeler par cout<<endl ou endl(cout) ce qui a strictement le même effet.
Par contre, sur un iostream tamponné ( ou buffered ou bufferisé, c´est selon), endl provoque également un " coup de chasse" ( ou flush, c´est selon aussi) qui consiste à envoyer d´un coup tout ce qui s´était accumulé jusque là ( sans s´afficher pour cout, sans s´écrire pour un fichier).
J´espère avoir été clair.
Tu auras sans aucun doute un comportement correct de cout<<´\n´, mais c´est " sale" et une habitude à ne surtout pas prendre.