文件结束标识EOF
- EOF是end-of-file的缩写,表示的是文件的结束标志,可以是文件(file), 也可以是标准输入(stdio)。与换行符"\n"不同,换行符是一行的结束标志。以及字符串操作时,用"\0"表示字符串的结束标志。
- EOF仅仅是一个宏定义,其值为-1,不是控制字符"\r","\t","\n"等。
- EOF的值是-1,原因是文本对应都是ASCII码,0~255,都是正值,不可能有负值。用-1好与之区分。
- 读取数据的程序需要在到达文件结尾时停止,当文件位置指针到达文件的末尾或者发生错误时,操作函数,例如getchar(),getc()会返回特殊值EOF。
- 因为两种情况都返回EOF,所以为了区分两者的关系,有两个对应的函数,分别是feof()和ferror()。如果最近一次输入调用检测到文件结尾,feof()函数返回一个非零值,否则返回零值。如果发生读写错误,ferror()函数返回一个非零值,否则返回零值。
- 标准输入与文件输入不一样,无法事先知道输入流的大小,必须手动输入一个字符,用来标识文件流结尾,Unix使用ctrl+D标识文件结尾。MS-DOS环境下使用字符ctrl+z标识文件的结束。如果以文本模式打开这样的文件,c可以认出这个字符事标识文件结尾的字符,但是,如果是以二进制模式打开这样的文件,只会把ctrl+z当作文件中的一个字符。真正的文件结尾还在后面,也许紧跟着ctrl+z,也许用空字符填充文件以使它的大小为256的倍数
标准输入:
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[20];
char c;
int i=0;
printf("please input less than 20 characters\n");
c=getchar();
while(c!=EOF&&i<20)
{
str[i]=c;
i++;
c=getchar();
}
printf("the size of character array is%d\n",strlen(str));
printf("All of characters in the array is:%s",str);
return 0;
}
结果:
键盘输入:hello,world 回车 然后ctrl+d结束标识
文本输入:
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[20];
char c;
int i=0;
FILE *fp;
fp=fopen("myfile.txt","r");
c=getc(fp);
while(c!=EOF&&i<20)
{
str[i]=c;
i++;
c=getc(fp);
}
printf("the size of character array is%d\n",strlen(str));
printf("All of characters in the array is:%s\n",str);
return 0;
}
结果: