一种比异常终止更灵活的方法是,使用函数的返回值来指出问题。例如,ostream类的get(void)成员ASCII码,但到达文件尾时,将返回特殊值EOF。对hmean()来说,这种方法不管用。任何树脂都是有效的返回值,因此不存在可用于指出问题的特殊值。在这种情况下,可使用指针参数或引用参数来将值返回给调用能够程序,并使用函数的返回值来指出成功还是失败。istream族重载>>运算符使用了这种技术的变体。通过告知调用程序是成功了还是失败了,使得程序可以采取异常终止程序之外的其他措施。下面的程序是一个采用这种方式的示例,它将hmean()的返回值重新定义为bool,让返回值指出成功了还是失败了,另外还给该函数增加了第三个参数,用于提供答案。
error2.cpp

// 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::endl;
else
std::cout << "One value should not be the negative "
<< "of the other - try again.\n";
std::cout << "Enter next set of numbers <q to quit>: ";
}
std::cout << "Bye!\n";
return ;
} bool hmean(double a, double b, double * ans)
{
if (a == -b)
{
*ans = DBL_MAX;
return false;
}
else
{
*ans = 2.0 * a * b / (a + b);
return true;
}
}

效果:

Enter two numbers: 3 6
Harmonic mean of 3 and 6 is 4
Enter next set of numbers <q to quit>: 10 -10
One value should not be the negative of the other - try again.
Enter next set of numbers <q to quit>: 1 19
Harmonic mean of 1 and 19 is 1.9
Enter next set of numbers <q to quit>: q
Bye!

另一种在某个地方存储返回条件的方法是使用一个全局变量。可能问题的函数可以在出现问题时将该全局变量设置为特定的值,而调用程序可以检查该变量。传统的C语言数学库使用的就是这种方法,它使用的全局变量名为errno。当然,必须确保其他函数没有将该全局变量用于其他目的。

最新文章

  1. gulp使用引导
  2. python 传递结构体指针到 c++ dll
  3. rsync 参数断点续传
  4. My First Django Project - &lt;Django + MySQL + Ajax&gt; (1)
  5. 使用gcc编译gdb调试
  6. android数据库(随apk一起发布数据库)
  7. 关于C++数组的几点讨论
  8. Java 并发编程内部分享PPT分享
  9. JavaScript-DOM编程的一些常用属性
  10. vue2.0笔记《二》组件
  11. webkit
  12. JVM内存溢出时快照转存HeapDump到文件
  13. 2019你该掌握的开源日志管理平台ELK STACK
  14. 建立标准编码规则(二)-DiagnosticAnalyzer 增加诊断分析代码
  15. linux批量替换文本字符串
  16. 安装指定版本capistrano
  17. SQL SERVER 查看SQL语句IO,时间,索引消耗
  18. LaTeX技巧207:使用align环境输入多行公式的技巧
  19. ASP.NET CheckBoxList 控件实现全选、反选、清除功能 利用js
  20. Uva10048 Audiophobia (Floyd)

热门文章

  1. 高速掌握Lua 5.3 —— 扩展你的程序 (1)
  2. 初看mysql源代码之mysql.cc
  3. 二叉树、红黑树、伸展树、B树、B+树
  4. [4G]常用AT指令
  5. win10计算机打开不要是“快速访问”功能?
  6. Iconfont在移动端遇到问题的探讨
  7. awk多列匹配
  8. devstack install attributeError: &#39;module&#39; object has no attribute &#39;__version__&#39;
  9. EF中修改对象的值的问题。。。(字段超级多的时候)
  10. JavaSE集合(八)之Map