zl程序教程

您现在的位置是:首页 >  IT要闻

当前栏目

C语言:错误处理

2023-02-18 16:40:17 时间

这是很基础的教程,我只是写给自己看,作为一个学习笔记记录一下,如果正在阅读的你觉得简单,请不要批评,可以关掉选择离开

如何学好一门编程语言

  • 掌握基础知识,为将来进一步学习打下良好的基础。
  • 上机实践,通过大量的例题学习怎么设计算法,培养解题思路。
  • 养成良好的编码习惯,注释一定要写,要不然保你一周后自己写的代码都不认识了

  C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。

  在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或 NULL,同时会设置一个 错误代码 errno ,该错误代码是全局变量,表示在函数调用期间发生了错误。您可以在 errno.h 头文件中找到各种各样的错误代码。

  所以,我们可以通过检查返回值,然后根据返回值决定采取哪种适当的动作。开发人员应该在程序初始化时,把 errno 设置为 0,这是一种良好的编程习惯。0 值表示程序中没有错误。

错误处理相关函数

 perror("字符串")  打印: 字符串: 当前errno值的文本表示形式 

 strerror(errno)  返回一个指针,指针指向当前errno值的文本

 案例:打开一个不存在的文件。使用上面的函数来输出错误消息,另外有一点需要注意,我们使用  fprintf  的时候应该使用 stderr 文件流来输出所有的错误。

#include <stdio.h>
#include <errno.h>
#include <string.h>

extern int errno;   // 只声明但不定义,errno在其他文件中已经定义了

int main(){
    FILE* pf;   // 声明文件类型的指针
    int errnum;
    pf = fopen("unexist.txt", "rb");
    if (pf == NULL){
        errnum = errno;
        fprintf(stderr, "错误号: %d\n", errno);    //错误号: 2
        perror("通过 perror 输出错误");   //通过 perror 输出错误 : No such file or directory
        fprintf(stderr, "打开文件错误: %s\n", strerror(errnum));  //打开文件错误 : No such file or directory
    }
    else{
        fclose(pf);
    }
    return 0;
}

在进行除法运算时,因此我们可以提前检查 分母 是否为零,避免运行时错误。

#include <stdio.h>
#include <stdlib.h>
 
main()
{
   int dividend = 20;
   int divisor = 0;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "除数为 0 退出运行...\n");
      // 除数为 0 退出运行...
      exit(-1);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为 : %d\n", quotient );
 
   exit(0);
}
View Code

如果 程序运行工程,会返回宏 EXIT_SUCCESS,它被定义为 0。

如果程序运行失败,退出程序时会带有状态值 EXIT_FAILURE,被定义为 -1。

#include <stdio.h>
#include <stdlib.h>
 
main()
{
   int dividend = 20;
   int divisor = 5;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "除数为 0 退出运行...\n");
      exit(EXIT_FAILURE);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为: %d\n", quotient );
 
   exit(EXIT_SUCCESS);
}
View Code
quotient 变量的值为 : 4
结果

 

 

参考

菜鸟教程