Пояснение за getch() ?

Здравейте!

Колеги, пак опирам до вашата експертиза: опитвам да разбера разликите между стандартните getc(), getchar() и дефинираните в conio.h getch() и getche(). 

два въпроса:

1 - защо следният код, след чисто и просто натискане на Enter, изкарва "|a", а не "a|" на първия ред и "|a" на втория ред? или дори "а||a" (въпреки, че за мен това също не би имало логика)

2 - доколкото разбирам getche() също като getch() прескача буфера. защо тогава тук  (най-отдолу) пише следното: " But when you use DOS shell in Turbo C, double g, i.e., 'gg' "? от къде идва повторението на въведения символ?

Благодаря предварително на всички и се извинявам за евентуално проявена некомпетентност някъде!

Поздрави!