コンパイラは、'\n'に対してコンパイラが信じる(大抵は対応OSが改行コードとする)文字コードを出力します。
・MS-DOS/Windowsの流れはCR+LF (0x0d, 0x0aの2文字)
・旧Mac(OS9以前)はCR(0x0d)
・unix, Linux系はLF(0x0a)
・(unix系という意味ではなく)無条件にLFの文字コードとして0x0aを出力する(組込みでありがち)
ここでCRとかLFというのは、元々の意味としてはタイプライターの世界でCR=Cardige Return 行頭に戻る、LF=Line Feed '紙'を次行に送る(次文字の桁位置は変わらない) 。
タイプライターの動作をエミュレートして、次行に送り、つづいて行頭に戻ることでいわゆる改行動作をする、というのがMS-DOSタイプの考えでしょう(1文字に対して2バイト出力が微妙に嫌われるケースがあるというのはまた別の話として)。
タイプライターに縛られず、そんなの1バイトで改行表せばいいじゃない、というのでCRを選択したのが旧Mac、LFを選択したのがunix系、ということと想像します(なんの根拠も持っていないので)。
なお、'\r'はコンパイラに依らずCRのコード(0x0d)を吐くのが普通だと思います。意識して調べたことはありませんが。
一方、「端末」は、文字コードを受けた時どう動作すべきでしょうね。考え方で分かれるでしょう。
忠実にタイプライターのエミューレータとしてCRで行頭、LFで次行...MS-DOS系ならこれでOK。でも、この動作で旧Macやunixの端末としてテキストを流し込まれたら「改行」に見えません。当然端末としてそれぞれに対応する(CRあるいはLFだけで'改行'する)ものに分化するでしょう。汎用の端末であれば切り替えの設定がどこかにあるかも知れません。なにかのシステムに組み込まれた端末であれば、どのように動作するかは決め打ちでいいはずです。
そうなると、どう表示されるかはわかるとかわからないとかではなく「端末がそのように作られている」という話しかできないでしょう。同じ母体だからといってpaiza.ioとpaizaラーニングの端末が同じであるという保証もないし、
・改行コードには流派がある
・それを受け取る端末の動作にも流派がある
・改行コード周りをいじくり回すとそのへんの混乱が見えてしまう
ということで、そういうものだ、と受け入れるしかないのでは?
この時代に「俺は端末表示のウイザードを目指すぜ!」 とかいうのならまぁ頑張って「わかって」もいいですけれど。(MS-DOSの終末期にはCUI画面でいかにGUIっぽいことをするかというのに努力が注がれた時代がありましたっけ)
(MS-DOS系でもscanfの"%c"で改行が一文字でとれるぢゃないか、とかいうのはまたちょっとべつの話として...)