# include<stdio.h>
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()也可用于测试正文文件。
对于二进制文件,一般不能以读人字节的值是否为-1来判定二进制文件是否结束,而应该用函数feof()。
3.字符(或字节)逐一生成形成新文件的程序结构
正文文件与二进制文件的生成程序除文件打开方式不同外,它们的程序结构基本相同。字符(或字节)逐一生成输出,形成新文件的程序结构有:
int c; /* 也可以是char类型 */
… /* 说明有关变量和设置初值等 */
fp = fopen(文件名,"W"); /* 或fP=fopen(文件,"wb") */
while(还有字符(或字节)) {
… /* 生成字符(或字节)存于变量c */
fpute( c,fp); /* 将生成的字符(或字节)输出 */
}
fclose(fp);
… /* 输出程序结束报告 */
这里的函数fputc()的说明形式为
int fputc( char ch, FILE *fp)
该函数的功能是将ch中的字符输出到与fp文件指针相联系的文件中。函数fputc()返回一个整数值。如果输出成功,则返回值就是输出字符的ASCII代码值;如果输出失败,则返回EOF,即-1。
曾介绍过的函数putchar()是在stdio.h中用函数fputc()定义的宏: