一种比异常终止更灵活的办法是,使用函数的返回值来指出问题。

例如,ostream类的get(void)成员通常返回下一个输入字符的ASCII码,但到达文件尾时,将返回EOF。

对hmean()来说,这种方法不管用。任何数值都是有效的返回值,因此不存在可以指出问题的特殊值。

在这种情况下,可以使用指针参数或引用参数来将值返回给调用程序,并使用函数的返回值来指出成功还是失败。

iostream族重载>>运算符使用了这个技术的变体。通过告知调用程序是成功了还是失败了,使得程序可以采取除异常终止程序之外的其他措施。

下列程序就是采用这种方法,它将hmean()的返回值重新定义为bool,让返回值指出成功了,还是失败了。另外还给该函数增加了第三个参数,用于提供答案。

 //error2.cpp --returning an error code
#include<iostream>
#include<cfloat> //(or float.h) for DBL_MAX bool hmean(double a, double b, double * ans); int main()
{
double x, y, z;
std::cout<<"Enter two numbers: ";
while(std::cin>>x>>y)
{
if(hmean(x,y,&z))
std::cout<<"Harmonic mean of "<<x<<" and "<< y
<<" is "<<z<<std::end;
else
std::cout<<"One value should not be the negative"
<<"of the other- try again.\n";
}
std::cout<<"Bye!\n";
return ;
}
 bool mean(double a, double b, double * ans)
{
if(a == -b)
{
*ans =DBL_MAX;
return false;
} else
{
*ans = 2.0 * a * b / (a+b);
return true;
}
}

这个程序设计避免了错误输入导致的恶果,让用户能够继续输入。

当然,设计确实依靠用户检查函数的返回值。这项工作不是程序员经常做的。

第三个参数可以是指针或引用。很多程序员都倾向于使用指针,因为这样可以明显看出是哪个参数用于提供答案

另外一种在某个地方存储返回条件的方法是使用一个全局变量

可能出现问题的函数可以在出现问题时将该全局变量设置为特定的值,而调用程序可以检查该变量。

C++_异常2-返回错误码的更多相关文章

  1. ErrorCode枚举类型返回错误码信息测试,手动抛出异常信息,在事务中根据错误码来回滚事务的思路。

    ErrorCode.java 简单测试代码,具体应用思路:手动抛出异常信息,在事务中根据错误码来回滚事务的思路. public enum ErrorCode { //系统级 SUCCESS(" ...

  2. Spring Boot 如何自定义返回错误码错误信息

    说明 在实际的开发过程中,很多时候要定义符合自己业务的错误码和错误信息,而不是统一的而不是统一的下面这种格式返回到调用端 INTERNAL_SERVER_ERROR(500, "Intern ...

  3. 捉虫记:SHGetSpecialFolderPath返回错误码为2

    通常我们想获得系统的一些路径时,都会使用一些Shell函数.比如SHGetSpecialFolderPath,SHGetFolderPath,SHGetKnownFolderPath等,传入我们想要的 ...

  4. libcurl 调用curl_easy_getinfo( ) 返回错误码对照

    //执行设置好的操作 res = curl_easy_perform(easy_handle); //获取HTTP错误码 ; curl_easy_getinfo(easy_handle, CURLIN ...

  5. flask请求钩子、HTTP响应、响应报文、重定向、手动返回错误码、修改MIME类型、jsonify()方法

    请求钩子: 当我们需要对请求进行预处理和后处理时,就可以用Flask提供的回调函数(钩子),他们可用来注册在请求处理的不同阶段执行的处理函数.这些请求钩子使用装饰器实现,通过程序实例app调用,以 b ...

  6. C++异常 返回错误码

    一种比异常终止更灵活的方法是,使用函数的返回值来指出问题.例如,ostream类的get(void)成员ASCII码,但到达文件尾时,将返回特殊值EOF.对hmean()来说,这种方法不管用.任何树脂 ...

  7. 如何解决加载动态链接库DLL失败,返回0,GetLastError返回错误码126

    通常情况下使用LoadLibrary加载DLL都可以成功,但是当被加载的DLL内部依赖其他DLL无法被找到时,该函数会返回126(ERROR_MOD_NOT_FOUND)错误. 解决办法有2种: 1) ...

  8. [Jmeter]jemeter启动报错,返回错误码 5,处理方法

    今天在使用jmeter的时候,启动GUI,发现bat文件执行有告警,告警内容如下: java.util.prefs.WindowsPreferences <init>WARNING: Co ...

  9. 【postMan】发送post请求,返回错误码415

    解决方法: 参看:https://www.cnblogs.com/spec-dog/p/3731279.html 将Request的Content-Type:application/json;char ...

随机推荐

  1. 在Ubuntu16.04上使用rz上传文件,XXX was skipped

    原本想把hadoop-2.8.5.tar.gz上传到/usr/local/src文件夹下,报错,was skipped 如下图: 换个文件夹位置,更换到本用户文件夹下,可以上传,说明是对文件夹操作权限 ...

  2. Net-tools

    一.简介 Net-tools 包含如下程序,构成了 Linux 网络的基础. arp用来操作核心的ARP(地址解析协议)的高速缓存,通常用来增加.删除一个条目以及转储ARP高速缓存. dnsdomai ...

  3. 数据库MySQL之 视图、触发器、存储过程、函数、事务、数据库锁、数据库备份、事件

    数据库MySQL之 视图.触发器.存储过程.函数.事务.数据库锁.数据库备份.事件 浏览目录 视图 触发器 存储过程 函数 事务 数据库锁 数据库备份 事件 一.视图 1.视图概念 视图是一个虚拟表, ...

  4. 解决IE与FF 中 input focus 光标移动在最后的方案

    只要把input元素的id传进来即可 function moveCursor(id)  { var id = document.getElementById(id); id.focus(); var  ...

  5. 《the art of software testing》 第三章 人工测试

    在深入研究较为传统的计算机测试技术之前,要先进行"人工测试". 代码检查与走查是两种主要的人工测试方法. 代码检查与走查是对过去桌面检查过程(在提交测试前由程序员阅读自己程序的过程 ...

  6. Mac10.9下的libtiff编译

    libtiff介绍 libtiff下载 libtiff编译 libtiff介绍? 参考:http://en.wikipedia.org/wiki/Tiff libtiff下载 直接到官网下载:http ...

  7. 关于在jeecms中css,图片,html,模板是如何组装成——part1

    先从HTML入手:index.html <!DOCTYPE HTML> <html> <meta name="viewport" content=&q ...

  8. javaScript入门之常用事件

    JS中的常用事件 onfocus/onblur:聚焦离焦事件,用于表单校验的时候比较合适. onclick/ondblclick:鼠标单击和双击事件 onkeydown/onkeypress:搜索引擎 ...

  9. Java 文件上传至leanCloud

    首先,在Controller端入参设置为 @RequestParam(value = "file",defaultValue = "") MultipartFi ...

  10. C#在线运行--cmd方法

       此次C#在线运行采用cmd.exe用csc对文件进行编译,然后再运行的思路实现在线运行的效果.不过会生成二个文件(.cs和.exe),可能需要定期清除临时文件夹. 首先利用时间戳生成唯一文件名, ...