`
rollstone
  • 浏览: 37197 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于回车,换行,EOF

阅读更多
回车换行
http://www.cnblogs.com/faraway/archive/2009/03/05/1403649.html
这位大哥解释的很清楚。

我整理下:
三种系统的行结尾:
Windows: <回车><换行>   “\r\n”    0x0d0x0a; //顺序不能错。
Mac    : <回车>         “\r”     0x0d;
Linux  : <换行>         “\n”     0x0a; 

编程的时候,不管哪种系统,C语言标准输出流只要输入“\n”就可以换行了。
Linux 下 getchar() 捕捉的Enter键的Ascii为 0x0a.

EOF
EOF文档的结束符。在Linux下输入ctrl+d(window下:Ctrl+z,还要加一个回车)即视为输入一个EOF。但是EOF一般是作为一个文档结束的信号来处理的,文档中并没有存EOF


http://hi.baidu.com/shichaotansc/blog/item/cf0af7af779665fcfbed50cd.html
这文章写的有问题。并不是EOF不产生编码,而是EOF应该是个为-1的宏。
用getchar()捕捉的ctrl+d (linux下)的Acsii码为0xff.

 
    int ch;
    ch =getchar();
    while (ch != '#') //这样可以捕捉EOF,而不是遇到EOF就结束
    {
       fputc(ch ,fp);
       ch = getchar();
   }
//运行时输入:ctrl+d,#
//16进制查看文件,testtxt为输出文件
od -t x1 testtxt

//结果
0000000 ff
0000001


当判断条件为:
while ( ch !=EOF)
{
....
}
关于终端为什么要两次ctrl+d才能结束输入,这里有详细的讨论
http://bbs.chinaunix.net/viewthread.php?tid=981231&extra=&page=1

总结下就是因为:终端的设置问题。
另外
char c;
while((c = getchar()) != EOF)
http://www.c-faq.com/stdio/getcharc.html
这种写法会引发BUG。

http://bbs.chinaunix.net/thread-233220-1-1.html


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics