C 标准提供一些函数用来检查输入输出函数调用中的错误。
13.6.1 ferror 函数
在调用各种输入输出函数(如 putc, getc , fread, fwrite 等)时,日过出现错误,除了函数返回值有所反映外,还可以用 ferror 函数检查。它的一般调用形式为 ferror(fp); 如果 ferror 函数返回值为0(假),表示未出错;如果返回一个非零值,表示出错。应该注意,对同一个文件每一次调用输入输出函数,均产生一个新的 ferror 函数值,因此,应当在调用一个输入输出函数后立即检查 ferror 函数的值,否则信息会丢失。
在执行 fopen 函数时,ferror 函数的初始值自动置为0。
13.6.2 clearerr (清除错误) 函数
clearerr 函数的作用是使文件错误标志和文件结束标志置为0。假设在调用一个输入输出函数时出现错误, ferror 函数值为一个非零值。在调用 clearerr
(fp)后,ferror(fp)的值变成0。
只要出现错误标志,就一直保留,直到对同一文件调用 clearerr 函数或(重新)rewind 函数,或任何其它一个输入输出函数。
13.7 文件输入输出小结
在本节中将以上介绍过的输入输出函数作一概括性的小结,以一目了然,便于查阅。下表列出常用的缓冲文件系统函数。
分类 函数名 功 能
打开文件 fopen() 打开文件
关闭文件 fclose() 关闭文件
文 fseek() 改变文件位置指针的位置
件 rewind() 使文件位置指针重新置于文件开头
定位 ftell() 返回文件位置指针的当前值
文 fgetc(),getc() 从指定文件取得一个字符
件 fputc(),putc() 把字符输出到指定文件
读 fgets() 从指定文件读取字符串
写 fputs() 把字符串输出到指定文件
getw() 从指定文件读取一个字(int)型
putw() 把一个字(int)型输出到指定文件
fread() 从指定文件中读取数据项
fwrite() 把数据项写到指定文件
fscanf() 从指定文件按格式输入数据
fprintf() 按指定格式将数据写到指定文件中
文 feof() 若到文件末尾,函数值为“真”(非0)
件 ferror() 若对文件操作出错,函数值为“真”(非0)
状态 clearerr() 使 ferror 和 feof 函数值置零
文件这一章的内容是很重要的,许多可供实际使用的 C 程序都包含文件处理
.
本章只介绍一些最基本的概念,由于篇幅所限,不可能举复杂的例子。
如何进行文件操作(程序如下)
#include "stdio.h"
main() /*先新建一个文件夹(file.txt),运行该程序后,就有输入到文件中.*/
{
FILE *fp;
int x,y,x1,y1,z;
printf("please input two integer numbers:");
scanf("%d %d",&x,&y);
if((fp=fopen("file.txt","w"))==NULL) /*打开文件file.txt,准备往文件中写入数据*/
{
printf("cann't open file");
exit(0);
}
fprintf(fp,"%d %d",x,y); /*将x,y的值写入文件*/
fclose(fp); /*关闭文件*/
if((fp=fopen("file.txt","r"))==NULL) /*打开文件file.txt,准备从文件中读出数据*/
{
printf("cann't open file");
exit(0);
}
fscanf(fp,"%d %d",&x1,&y1); /*将刚才写入的两个整数分别读到变量x1,y1中*/
fclose(fp); /*关闭文件*/
z=x1+y1; /*计算两个数的和*/
printf("z=%d",z); /*显示在屏幕上*/
}
file2.c 程序
#include<stdlib.h>
#include<stdio.h>
void main()
{
FILE*in,*out;
char ch,infile[10],outfile[10];
printf("Enter the infile name:\n");
scanf("%s",infile);
printf("Enter the infile name:\n");
scanf("%s",outfile);
if((in=fopen(infile,"r"))==NULL)
{
printf("can not open infile\n");
exit(0);
}
if((out=fopen(outfile,"w"))==NULL)
{
printf("can not open outfile\n");
exit(0);
}
while(! feof(in)) fputc(fgetc(in),out);
fclose(in);
fclose(out);
}
file1(文本文档里的内容)
11 12