[b][size=large]回车换行[/size][/b]:
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.
[size=large][b]EOF[/b][/size]
EOF文档的结束符。在Linux下输入ctrl+d(window下:Ctrl+z,还要加一个回车)即视为输入一个EOF。[color=red]但是EOF一般是作为一个文档结束的信号来处理的,文档中并没有存EOF[/color]
http://hi.baidu.com/shichaotansc/blog/item/cf0af7af779665fcfbed50cd.html
这文章写的有问题。并不是EOF不产生编码,而是EOF应该是个为-1的宏。
用getchar()捕捉的ctrl+d (linux下)的Acsii码为0xff.
当判断条件为:
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
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.
[size=large][b]EOF[/b][/size]
EOF文档的结束符。在Linux下输入ctrl+d(window下:Ctrl+z,还要加一个回车)即视为输入一个EOF。[color=red]但是EOF一般是作为一个文档结束的信号来处理的,文档中并没有存EOF[/color]
http://hi.baidu.com/shichaotansc/blog/item/cf0af7af779665fcfbed50cd.html
这文章写的有问题。并不是EOF不产生编码,而是EOF应该是个为-1的宏。
用getchar()捕捉的ctrl+d (linux下)的Acsii码为0xff.
[/code]
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