符号 ASCII码 意义
\n 10 换行NL\r 13 回车CR
回车 (\r) 本义是光标重新回到本行开头,r的英文return
换行 (\n) 本义是光标往下一行(不一定到下一行行首),n的英文newline 回车和换行现在明白了,可是为什么我用的键盘一按Enter键,就能达到 -r 和 -n 的效果?Enter键到底是回车键还是换行键?
其实,在不同的操作系统中,这几个字符表现不同,比如在WIN系统下,这两个字符就是表现的本义;在UNIX类系统,换行(\n)就表现为光标下一行并回到行首;在MAC上,(\r)就表现为回到本行开头并往下一行,至于ENTER键的定义是与操作系统有关的。通常用的Enter是两个加起来。
回车和换行的历史:
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车“的由来。后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。
举个例子:
c++语言编程时(windows系统) \r 就是回到本行行首,这就会把这一行以前的输出覆盖掉。如:
int main() {cout << "I love you" << "\r" << "You love me,too." ;
}
最后只显示 You love me,too. 而 I love you 被覆盖了
\n 是回车+换行,把光标先移到行首,然后换到下一行,也就是 下一行的行首.
int main() {
cout << "I love you" << "\n" << "You love me,too." ;
}
则显示
I love you
You love me,too.