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

例如,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. SQL中对数据截取替换

    REPLACE(要修改字段名,‘被替换的特定字符’,‘替换的字符’) 表结构和插入数据 CREATE DATABASE TEST GO USE TEST GO CREATE TABLE TestTab ...

  2. 代码查看import的类是出自哪个jar包的方法(转)

    import java.security.ProtectionDomain; import java.security.CodeSource; public static void main(Stri ...

  3. ubunt 14.04 Could not find CMAKE_ROOT !!! CMake has most likely not been installed correctly. Modul

    CMake Error: Could not find CMAKE_ROOT !!! CMake has most likely not been installed correctly. Modul ...

  4. TTS技术

    一.简介 TTS技术,TTS是Text To Speech的缩写,即"从文本到语音".它将计算机自己产生的.或外部输入的文字信息转变为可以听得懂的.流利的汉语口语(或者其他语言语音 ...

  5. c++虚析构函数的使用及其注意点

    // ConsoleApplication33.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...

  6. linux学习1----初涉linux

    linux因其稳定高效的特点,受到很多开发者的青睐,因此将其作为服务器的操作系统. 作为一名开发者,程序员,掌握了一定的linux知识和技巧,程序的开发部署和运行也有不小的帮助. linux由于其开源 ...

  7. ASP.NET 5 Middleware, Or Where Has My HttpModule Gone?

    31 March 2015 13:22 ASP.NET 5 has been largely rewritten from the ground up, and incorporates some r ...

  8. [转]Replace all UUIDs in an ATL COM DLL.

    1. Introduction. 1.1 Recently, a friend asked me for advise on a very unusual requirement. 1.2 He ne ...

  9. CentOS 用户/组与权限

    useradd:添加用户 useradd abc,默认添加一个abc组 vipw:查看系统中用户 groupadd:添加组groupadd ccna vigr:查看系统中的组 gpasswd:将用户a ...

  10. rsync实时备份备份服务搭建和使用指南

    一.Rsync企业工作场景说明: 1.利用定时任务+rsync方式实现数据同步 对于网站内部技术人员创建的数据,可以采取定时任务的方式 2.利用实时任务+rsync方式实现数据同步 对于网站外部访问用 ...