EOF
在学习C语言的过程中,很多琐碎的知识点长时间过后就会淡忘的,相信只有写下来才是最好的方法。
在编写((c = getchar()) != EOF)时,都不明白EOF为什么,后来查找资料才得知是结束符的意思(Windows下为组合键Ctrl+Z,Unix/Linux下为组合键Ctrl+D), 也困惑为什么明明输了ctrl+z 却不结束 经查找资料发现其中还有不少知识
(下面内容多摘)
大师编写C的时候,当时并没有所谓终端输入的概念,所有的输入实际上都是按照文件进行读取的,文件中一般都是以行为单位的。因此,只有遇到换行符,那么程序会认为输入结束,然后采取执行程序的其他部分。同时,输入是按照文件的方式存取的,那么要结束一个文件的输入就需用到EOF(Enf Of File). 这也就是为什么getchar结束输入退出时要用EOF的原因。
这里要强调的一点就是,getchar函数通常返回终端所输入的字符,这些字符系统中对应的ASCII值都是非负的。因此,很多时候,我们会写这样的两行代码:
char c;
c =getchar();
这样就很有可能出现问题。因为getchar函数除了返回终端输入的字符外,在遇到Ctrl+D(Linux下)即文件结束符EOF时,getchar()的返回EOF,这个EOF在函数库里一般定义为-1。因此,在这种情况下,getchar函数返回一个负值,把一个负值赋给一个char型的变量是不正确的。为了能够让所定义的变量能够包含getchar函数返回的所有可能的值,正确的定义方法如下(K&R C中特别提到了这个问题):
int c;
c =getchar();
故 getchar()返回的是int型
EOF的作用也可以总结为:当终端有字符输入时,Ctrl+D产生的EOF相当于结束本行的输入,将引起getchar()新一轮的输入;当终端没有字符输入或者可以说当getchar()读取新的一次输入时,输入Ctrl+D,此时产生的EOF相当于文件结束符,程序将结束getchar()的执行。
ps:
(1)printf("%6.1f %3.0f\n",c,f); 一开始总是不明白%6.1f明明说输出6个字符宽(包括小数点和正负),可运行结果总是不对,后来才发现原来%6.1f %3.0f这中间多了一个空格 在输出形式上也有影响
(2)在设置变量时 写的是int f;最后在输出语句中写的是"%3f" ,运行结果出错,所输出的变量类型,要与定义时相一致
加油!