2楼说的其实基本提示了原因了。
回车键应该产生的回车符(carriage return),就是 \r。ascii 码是 13
另一个更著名一点叫 换行符(linefeed 或者叫 newline),是 \n。ascii 码是 10。
标准库沿用 unix 的习惯,要求对行结束(end-of-line, eof)标志进行转换。具体在 windows 下就是
当读入 \r\n 时,吃掉 \r。在写出 \n 时,前缀一个 \r。
getch() 不是标准库的东西,遵循的要求可能不一样。
另外关于回车键的问题,可能还涉及键盘编码,和操作系统对它的处理之类的问题。一般不能一概而论。
至于为什么是这个结果,楼主可以自己想想看。如果解释不通,就是说这里用到的不止是行结束符这个一知识点。