(5)要打开二进制文件,只要在对应正文文件打开方式中接上字符b即可,如“rb”表示以输入方式打开二进制文件。
正文文件与二进制文件在使用时,还有一点不同。对于正文文件,输入时,回车符和换行符合成为一个换行符输入;输出时,换行符('\n')转换成为回车符和换行符两个字符一起输出。对于二进制文件,不进行上述这种转换。
9.文件关闭库函数fclose()
在使用完一个文件后,程序应该立即关闭它,以防止后继执行的程序语句错误或人为的误操作破坏正打开着的文件。关闭文件可调用库函数fclose()来实现。调用函数fclose()的一般形式为
fclose(文件指针);
例如:
fclose(fp);
调用函数fclose()的作用是使文件指针变量终止原先调用函数fopen()时所建立的它与文件的联系。调用函数fclose()之后,不能再通过该文件指针变量对其原先相连的文件进行读写操作,除非被再次打开。文件被关闭后,原文件指针变量又可用来打开文件,或与别的文件相联系,或重新与原先文件建立新的联系。
8.2 文件处理程序结构和文件输入输出常用库函数
1.正文文件输入处理
从正文文件逐一输入字符,对输入的字符作某种处理的程序结构有:
int c; /* 不能为char类型 */
… /*说明有关变量和设置初值等 */
fp=fopen(文件名,“r”); /* 正文文件以读方式打开 */
while(( c= fgetc(f))!= EOF) {
… /* 这里对刚读人的存于C中的字符作某种处理 */
}
fclose(fp);
.../*输出处理结果 */
其中函数 fgetC()的说明形式为
int fgetc(FILE *fp)
该函数的功能是从与中相联系的文件中读人下一个字符。在文件的控制块中,有一个当前读字符的位置信息,每读入一个字符后,在文件还未结束情况下,这个当前位置信息就移向其后一个字符,从而保证程序反复调用函数fgetc() 能顺序读人文件中的字符。函数fgetc() 的返回值就是读入字符的ASCII代码值。读八字符时,如遇到文件结束,函数返回文件结束标记EOF。对于正文文件,由于字符的ASCII代码不可能是-1,因此可用EOF(定义为-1) 作为文件结束标记。
【例8.1】 输入正文文件,统计文件中英文字母的个数,并输出。
为使程序更有一般性,设程序要统计的正文文件名在程序启动时由输入指定。
# include
FILE *fp;
int main()
{ int count, ch;
char fname[40];
printf(“输入文件名!\n”);
scanf(“%s%*c”, fname) ; /* 读入文件名和名后的回车符 */
if((fp = fopen(fname,“r”))== NULL) { /* 以读方式打开正文文件 */
printf(“Can not open%s file.\n”, fname);
return 0; /* 程序非正常结束 */
}
count= 0;
while((ch =fgetc(fp))! =EOF) {
/ * 这里对刚读人的存于ch中的字符信息作某种处理 */
if(ch>=‘a' && ch<='z' || ch>='A' && ch<='Z' )
count++;
}
fclose(fp);
/*输出处理结果 */
printf(“文件%s有英文字母%d个.\n”, fname, count)
return l; /* 程序执行正常结束 */
}
2.二进制文件输入处理
从二进制文件逐一输入字节,并作某种处理的程序结构有:
char c; /* 也可以是 int类型 */
… /* 说明有关变量和设置初值等 */
fp = fopen(文件名,“rb”);
while(! feof(fp)) {
c=fgetc(fp);
… /* 这里对存于C中的字节信息作某种处理 */
}
fclose(fp);
/* 输出处理结果 */
其中函数feof() 用来判断文件是否结束。函数调用feof(fp) 用来测试与fp相联系的文件当前状态是否为“文件结束”状态。如果是文件结束状态,函数调用feof(fp)返回非零值,否则返回零值。函数feof()也可用于测试正文文件。
本新闻共
6页,当前在第
3页
1 2 3 4 5 6