在c语言中是否有c++一样的异常处理机制,如果没有如何实现?

tongking 2002-02-01 09:30:49
程序如下:
#include <stdio.h>
long fact(int n);
int main()
{
int num=0;
while(num>=0)
{
printf(" Enter a number form 1 to 15");
scanf( "%d",&num);
if (num>=0&&num<15)
printf("%d ! is %ld",num,fact(num));
else
printf(" this number ");
};

return 0;
}
long fact(int n)
{
if(n>1)
return(n*fact(n-1));
else
return(1);
}
编译后,如果输入的是字母的话,屏幕滾屏。在c语言中是否可以实现c++语言的异常处理方式。或者如何实现对输入的是字符还是数字的检验。
...全文
128 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tongking 2002-02-02
  • 打赏
  • 举报
回复
非常感谢各位。
tongking 2002-02-02
  • 打赏
  • 举报
回复
散发
liu_feng_fly 2002-02-01
  • 打赏
  • 举报
回复
是啊,可以用longjmp等等,但是和异常处理不一样,这些函数只是在栈上跳转,并不会负责调用已经构造好的对象的析构函数,毕竟这是c++的概念,c里面没有
panjet 2002-02-01
  • 打赏
  • 举报
回复

在C中可以用 setjmp、longjmp 实现类似跳转的功能,我暂时没有例子,你可以看看关于setjmp的帮助里的例子试一试。
solar 2002-02-01
  • 打赏
  • 举报
回复
异常处理比if判断更方便,有时更有效,适于大型程序
lalatata 2002-02-01
  • 打赏
  • 举报
回复
好像没有必要用异常处理,因为异常处理多用于本应该成功但是以外失败的情况,不如:打开一个本应该存在但却意外被破坏的文件、分配内存等。这里用if判断更合适。
solar 2002-02-01
  • 打赏
  • 举报
回复
楼上的说的对,异常处理机制可能还要CPU硬件的支持
yangap 2002-02-01
  • 打赏
  • 举报
回复
首先,异常处理机制首先要在操作系统层面上实现,dos是不支持的,32位操作系统才支持,其次,要编译器的支持,显然,c中没考虑异常处理机制
www_fatman 2002-02-01
  • 打赏
  • 举报
回复
我在c中只用assert的,管它什么异常不异常.
out4b 2002-02-01
  • 打赏
  • 举报
回复
C中与C++异常机制相似的是一条编程规则:

在低层检查错误,在高层处理它们。(《程序设计实践》第88页倒数第二行。)

尽量不要使用setjmp/longjmp, it is brain damaged.

操作系统中的异常处理机制的完成必须要有硬件的支持。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧