23 -ferror()函数

1 函数原型

ferror():检查指定流stream的错误指示器是否被设置,函数原型如下:

int ferror ( FILE * stream );

cstdio库描述如下:

Check error indicator
1. Checks if the error indicator associated with stream is set, returning a value different from zero if it is.
2. This indicator is generally set by a previous operation on the stream that failed, and is cleared by a call to clearerr, rewind or freopen.
  1. 流的错误指示器是在文件流内部维护的一个状态标志:
    (1)用于指示基于流的操作过程中是否发生了错误;
    (2)读写错误:使用fread()、fwrite()、fscanf()、fprintf()、fgets()、fputs()、fputc()和fgetc()等函数,对流进行读写操作的过程中发生了错误,则流的错误指示器会被设置;
    (3)定位错误:使用fseek()、fsetpos()和rewind()等函数,对流进行重定位操作的过程中发生了错误,则流的错误指示器会被设置;
    (4)刷新错误:使用fflush()函数对流进行刷新操作的过程中发生了错误,则流的错误指示器会被设置;
    (5)通常,在操作流后,通过 ferror ()函数来检查流的错误指示器是否被设置。

cstdio库描述如下:

1. Streams have certain internal indicators that specify their current state and which affect the behavior of some input and output operations performed on them.
2. Error indicator
(1) This indicator is set when an error has occurred in an operation related to the stream. 
(2) This indicator can be checked with the ferror function, and can be reset by calling either to clearerr, freopen or rewind.

2 参数

ferror()函数只有一个参数stream:

  1. 参数stream是ferror()函数要检查的流,类型为FILE*;stream可以是文件流或标准流;当是文件流时,stream就是fopen()函数的返回值;当是标准流时,stream就是stdin、stdout和stderr。
    cstdio库描述如下:
stream
1. Pointer to a FILE object that identifies the stream.

3 返回值

ferror()函数的返回值类型为int型:

  1. 如果流操作有错误,流的错误指示器被设置,返回非0值;
  2. 如果流操作无错误,流的错误指示器未设置,返回0值。

cstdio库描述如下:

1. A non-zero value is returned in the case that the error indicator associated with the stream is set.
2. Otherwise, zero is returned.

4 示例

示例代码如下所示:

int main() {
   //
   FILE* fp = NULL;
   char buffer[100] = { 0 };
   // 打开文件  
   fp = fopen("1.txt", "r");
   if (fp == NULL) {
      perror("Failed to open file ");
      exit(1);
   }
   // 读文件
   while (1) {
      if (fgets(buffer, sizeof(buffer), fp) == NULL) {
         // 检查是否是因为文件结束而读取失败  
         if (feof(fp)) {
            printf("\nReached end of file.\n");
         }
         else {
            // 检查是否因为错误而读取失败  
            if (ferror(fp)) {
               printf("\nError reading file.\n");
               // 清除错误标志,以便后续操作  
               clearerr(fp);
               // 可以在这里处理错误,比如关闭文件等  
            }
         }
         break;
      }
      else {
         // 成功读取数据  
         printf("%s", buffer);
      }
   }
   // 关闭文件  
   fclose(fp);
   //
   return 0;
}

文件内容如下图所示:

在这里插入图片描述

代码运行结果如下图所示:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值