关于回车,换行,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 ff0000001
当判断条件为:
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
页:
[1]