C语言代码信息

运行结果
教程手册
代码仓库
点击编辑器上方的运行按钮,会在此处显示运行结果。
以下是用户最新保存的代码
获取Linux主机的唯一标识 发布于:2020-08-11 16:32 extern 修饰符用于当有两个或多个文件共享相同... 发布于:2020-08-11 15:58 变量在头部就已经被声明, 它们是在主函数内被定义... 发布于:2020-08-11 14:30 输出浮点类型占用的存储空间以及它的范围值 发布于:2020-08-11 14:21 表达式 sizeof(type) 获取 int 类... 发布于:2020-08-11 14:18 函数定义声明和全局变量 发布于:2020-08-11 11:56 3.给出两个 非空 的链表用来表示两个非负的整数。... 发布于:2020-08-11 15:31 2.给定一个排序链表,删除所有重复的元素,使得每个... 发布于:2020-08-07 21:43 2.给定一个排序链表,删除所有重复的元素,使得每个... 发布于:2020-08-07 21:43 2.给定一个排序链表,删除所有重复的元素,使得每个... 发布于:2020-08-08 12:32 九九乘法表 发布于:2020-08-05 20:25 个人学习一下 发布于:2020-08-04 19:44 重新测试链表 发布于:2020-08-07 16:20 结构体的测试学习 发布于:2020-08-01 17:10 C sandbox 发布于:2020-07-31 01:27 统计素数并求和 发布于:2020-07-28 16:12 树和二叉树 发布于:2020-07-28 14:36 反转一个单链表。原学习 发布于:2020-08-06 09:12 //带表头结点的单向链表 发布于:2020-07-28 16:01 反转一个单链表。 发布于:2020-08-01 17:06 同步机制学习 发布于:2020-07-26 17:21 设计预览项目 发布于:2020-07-25 21:30 分块检索法实验1 发布于:2020-07-25 10:39 时间戳时间计算 发布于:2020-07-24 15:56 两有序数组合并排序--非冒泡 发布于:2020-07-23 13:18 两有序数组合并排序--冒泡 发布于:2020-07-23 13:08 DSA学习中....... 发布于:2020-07-22 15:58 7、字符替换。要求用函数replace将用户输入的... 发布于:2020-07-21 11:04 hhhhhhhh 发布于:2020-07-18 14:47 this is a test 发布于:2020-07-18 14:29 No.1 最大因子。 发布于:2020-07-16 12:55 冒泡排序~ 发布于:2020-07-16 00:11 n! = ? 发布于:2020-07-15 22:26 1!+2!+3!+....+n!=? 发布于:2020-07-15 22:20 嘻嘻嘻嘻嘻嘻嘻 发布于:2020-07-14 19:27 123456789 发布于:2020-07-12 09:29 #inclde<stdio.h> ... 发布于:2020-07-10 22:55 9、有5个字符串,首先将它们按照字符串中的字符个数... 发布于:2020-07-21 13:51 chapter1 发布于:2020-07-08 22:57 普通计算器 发布于:2020-07-08 13:20 普通计算器 发布于:2020-07-08 13:20 shuzu sizeof 发布于:2020-07-07 18:20 输入数的阶乘 发布于:2020-07-06 10:59 输入两个正整数m和n,求其最大公约数和最小公倍数。 发布于:2020-07-05 17:04 利用条件运算符的嵌套来完成此题:学习成绩>=... 发布于:2020-07-05 15:18 将一个正整数分解质因数。例如:输入90,打印出90... 发布于:2020-07-05 11:11 打印出所有的"水仙花数",所谓... 发布于:2020-07-05 10:26 有一对兔子,从出生后第3个月起每个月都生一对兔子,... 发布于:2020-07-05 09:57 分行与列考虑,共 9 行 9 列,i 控制行,j ... 发布于:2020-07-04 20:45 用*号输出字母C的图案。 发布于:2020-07-04 20:25 [更多]
显示目录

错误处理

C 错误处理

C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或 NULL,同时会设置一个错误代码 errno,该错误代码是全局变量,表示在函数调用期间发生了错误。您可以在 头文件中找到各种各样的错误代码。

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

errno、perror() 和 strerror()

C 语言提供了 perror()strerror() 函数来显示与 errno 相关的文本消息。

  • perror() 函数显示您传给它的字符串,后跟一个冒号、一个空格和当前 errno 值的文本表示形式。
  • strerror() 函数,返回一个指针,指针指向当前 errno 值的文本表示形式。

让我们来模拟一种错误情况,尝试打开一个不存在的文件。您可以使用多种方式来输出错误消息,在这里我们使用函数来演示用法。另外有一点需要注意,您应该使用 stderr 文件流来输出所有的错误。

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

extern int errno ;

int main () {
   FILE * pf;
   int errnum;
   pf = fopen ("unexist.txt", "rb");
   if (pf == NULL)
   {
      errnum = errno;
      fprintf(stderr, "Value of errno: %d\n", errno);
      perror("Error printed by perror");
      fprintf(stderr, "Error opening file: %s\n", strerror( errnum ));
   }
   else
   {
      fclose (pf);
   }
   return 0;
}`

尝试一下

当上面的代码被编译和执行时,它会产生下列结果:

`Value of errno: 2
Error printed by perror: No such file or directory
Error opening file: No such file or directory`

被零除的错误

在进行除法运算时,不检查除数是否为零,这是程序员编程时常见的问题,会导致一个运行时错误。

为了避免这种情况发生,下面的代码在进行除法运算前会先检查除数是否为零:

`#include <stdio.h>
#include <stdlib.h>

main()
{
   int dividend = 20;
   int divisor = 0;
   int quotient;

   if( divisor == 0){
      fprintf(stderr, "Division by zero! Exiting...\n");
      exit(-1);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "Value of quotient : %d\n", quotient );

   exit(0);
}`

尝试一下

当上面的代码被编译和执行时,它会产生下列结果:

`Division by zero! Exiting...`

程序退出状态

通常情况下,程序成功执行完一个操作正常退出的时候会带有值 EXIT_SUCCESS。在这里,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, "Division by zero! Exiting...\n");
      exit(EXIT_FAILURE);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "Value of quotient : %d\n", quotient );

   exit(EXIT_SUCCESS);
}`

尝试一下

当上面的代码被编译和执行时,它会产生下列结果:

`Value of quotient : 4`
由JSRUN为你提供的C语言在线工具
        JSRUN提供的C语言在线运行,C语言 在线编译工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。

title

使用此草稿 删除草稿