13.6 出错的检测

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

posted on 2010-08-13 08:51 wrh 阅读(210) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

统计

常用链接

留言簿(19)

随笔档案

文章档案

收藏夹

搜索

最新评论

阅读排行榜

评论排行榜