小谈 回车(-r) 换行(-n)

2166阅读 0评论2012-11-21 luotaijia
分类:WINDOWS

    键盘上一个Enter键,不就已经回车换行了吗?为什么还分为回车和换行?
    符号    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.


    本文参考 http://www.cnblogs.com/clarkchen/archive/2011/06/02/2068609.html
上一篇:【ASM】汇编常用指令
下一篇:对算法的性能评价