EOF是end of file的缩写,在c语言中,用getchar()或者scanf()读取文件检测到结尾,都会返回一个特殊的值,这个返回值就是EOF。EOF定义在头文件stdio.h中:#define EOF (-1) 由于输入字符的返回值通常在0~127间,包括扩展字符集的返回值返回值也只不过在0~255间,也就是说,-1不对应任何字符,故可以标记文件结尾,其实-2或者-3当然也可以,但是c语言中已经规定了。
getchar()返回值为int,把其返回值赋给char类型的数据难免有时会丢失数据,在Linux和unix中,Ctrl+D表示文件结尾,许多微型计算机,包括windows,把Ctrl+Z表示文件结尾,有些系统把任意位置的Ctrl+Z解释成文件结尾信号(Windows下并不是)。
来看 一个小程序:(重复输入,直到文件结尾)
#include<stdio.h>
int main(void)
{
int ch;
while((ch=getchar())!=EOF)
putchar(ch);
return 0;
}
可以利用这个程序来输入一段字符,按回车后,所输入的字符会在下一行原样显示,光标跳转到下一行,等待继续输入,当遇到Ctrl+Z才会结束该循环。
如果前面有字符,再输入Ctrl+Z并不会结束循环,而是在字符后面输出了一个箭头,只有当Ctrl+Z单独在一行时(类似Ubuntu下在终端中的操作),才能结束该循环,前面也提到,有些操作系统会把任意位置的Ctrl+Z当做结束的信号,但是这在Windows里并不适用。
数据的输入,不仅仅可以通过键盘,也可以从文件中读取;同样,数据的输出,不仅仅可以在屏幕上显示,也可以存到文件中。这里键盘和屏幕都是I/O设备,而文件同样可以当做“I/O设备”。文件是存储信息的区域,,C语言可以通过标准I/O包来处理文件,C处理的不是文件,而是文件流。流,是一个实际输入与输出映射的的理想化数据流,不同种类的输入输出,都可以当做统一的流来处理,stdin流表示键盘输入,stdout流表示屏幕输出,并且getchar(),putchar(),scanf(),printf()函数都在标准I/O包里,可以处理这两种流。
当然,关于怎么从文件中读取数据,把结果直接保存在文件中,涉及到重定向及文件的问题,以后会仔细写的!
今天在多媒体设计大赛得了二等奖,还不错吧,虽说自己有很多的不足,但是这也是对自己的一个小认可,继续努力吧!从每天坚持写博客做起!