因为C语言和UNIX的开发者是同事……
C语言里统一用的\n表示另起一行。微软的DOS受到了当时8位系统主流OS CP/M的影响,使用\r\n表示另起一行。Mac用\r表示另起一行。
C标准库隐藏了平台的不一致性,所有标准输入输出(包括标准文件)操作时都会自动进行转换,保证语言内总是用\n。像getchar()、fscanf()、printf()等等都是这样的。
getch()并不是C标准库的函数,而是比较低级的控制台函数,所以不会进行转换。
你无法通过cin输入回车符(ASCII 13),因为C++标准库和C一样,通过键盘中断服务读取的\r\n会被自动转换为\n。