前几天在编程中,代码如下:

头文件:ErrorHandlingModule.h

//filename:ErrorHandlingModule.h

#ifndef ErrorHandlingModule_H

#define ErrorHandlingModule_H

#include <stdexcept>

using namespace std;

namespace SAMSErrorHandling {

void Initialize(void);

int HandleNotANumberError(void);

int HandleRuntimeError(runtime_error theRuntimeError); 

}





#endif

实现文件:ErrorHandlingModule.cpp

//filename:ErrorHandlingModule.cpp

#include <iostream>

#include <exception>

#include <stdexcept>

#include <cstdlib>

#include "ErrorHandlingModule.h"

using namespace std;

namespace SAMSErrorHandling {







void Initialize(void) {

cin.exceptions(cin.failbit);

}





int HandleNotANumberError(void) {

cerr << "Input error - not a number?" << endl;

cin.clear();





char BadInput(5);                //Eat the bad input so we can pause the program

cin >> BadInput;





return 1;                        //An error occurred

}



int HandleRuntimeError(runtime_error theRuntimeError) {

cerr << theRuntimeError.what() << endl;



return 1;

}

}

头文件:PromptModule.h

//filename:PromptModule.h

#ifndef PromptModule_H

#define PromptModule_H

namespace SAMSPrompt {

void PauseForUserAcknowledgement(void);

bool UserWantsToContinueYOrN(const char *theThingWeAreDoing);

}

#endif

实现文件:PormptModule.cpp

//filename:PormptModule.cpp

#include <iostream>

#include "PromptModule.h"





namespace SAMSPrompt {

using namespace std;





void PauseForUserAcknowledgement(void) {

//Note: You must type something before Enter

char StopCharacter;

cout << endl << "Press a key and \"Enter\": ";

cin >> StopCharacter;

}





bool UserWantsToContinueYOrN(const char *theThingWeAreDoing) {

char DoneCharacter;

bool InvalidCharacterWasEntered = false;



do {

cout <<

endl <<

theThingWeAreDoing <<

" - Press \"n\" and \"Enter\" to stop ";





cin >> DoneCharacter;



InvalidCharacterWasEntered = !((DoneCharacter == 'y') || (DoneCharacter == 'n'));



if (InvalidCharacterWasEntered) {

cout << "...Error - " << "Please enter \"y\" or \"n\"." << endl;

};

}

while (InvalidCharacterWasEntered);





return (DoneCharacter != 'n');                //true when not "n"

  }

}

主函数:main.cpp

//filename:main.cpp

#include <iostream>

//#include <exception>

#include "ErrorHandlingModule.h"

#include "PromptModule.h"

#include <cstdlib>

using namespace std;





char GetOperator(void) {

char Operator;





cout << "Operator: ";

cin >> Operator;





return Operator;

}





float GetOperand(void) {

float Operand = 1;





cout << "Operand: ";

cin >> Operand;





return Operand;

}





float Accumulate(const char theOperator, const float theOperand) {

static float myAccumulator = 0;

switch (theOperator){

case '+': myAccumulator = myAccumulator + theOperator;

 break;

case '-': myAccumulator = myAccumulator - theOperator;

 break;

case '*': myAccumulator = myAccumulator * theOperator;

 break;

case '/': myAccumulator = myAccumulator / theOperator;

 break;

default: throw runtime_error("Error - Invalid operator");

};





return myAccumulator;

}





int main(int argc, char * argv[]) 

{

SAMSErrorHandling::Initialize();





do {

try {

char Operator = GetOperator();

float Operand = GetOperand();





cout << Accumulate(Operator, Operand) << endl;

}

catch(runtime_error RuntimeError) {

SAMSErrorHandling::HandleRuntimeError(RuntimeError);

}

catch(...) {

SAMSErrorHandling::HandleNotANumberError();

};

}

while (SAMSPrompt::UserWantsToContinueYOrN("More? "));  





return 0;

}

刚开始出现了种种的问题,后来发现是少了头文件#include <stdexcept>,调试了十几天终于成功了,欢喜一下吧

编程中的runtime_error问题的更多相关文章

  1. 你不知道的this—JS异步编程中的this

    Javascript小学生都知道了javascript中的函数调用时会 隐性的接收两个附加的参数:this和arguments.参数this在javascript编程中占据中非常重要的地位,它的值取决 ...

  2. Java EE 编程中路径

    版权声明:未经博主允许,不得转载 首先我们要限定一个范围,是一个项目,或是以个访问地址..就先以一个项目为限定的范围 前述: 学过物理学的都知道相对运动和绝对运动, 虽然是相似的概念,但这里的要简单得 ...

  3. 并发编程中.net与java的一些对比

    Java在并发编程中进行使用java.util.concurrent.atomic来处理一些轻量级变量 如AtomicInteger AtomicBoolean等 .Net中则使用Interlocke ...

  4. Java编程中“为了性能”尽量要做到的一些地方

    最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源总结的一些在Ja ...

  5. 第51讲:Scala中链式调用风格的实现代码实战及其在Spark编程中的广泛运用

    今天学习了下scala中的链式调用风格的实现,在spark编程中,我们经常会看到如下一段代码: sc.textFile("hdfs://......").flatMap(_.spl ...

  6. Windows编程中UNICODE和_UNICODE定义问题

    Windows编程中UNICODE和_UNICODE定义问题 先转一篇文章: 初学Windows SDK编程时碰到过这个问题,相信很多初学Windows编程的人也都碰到过,后来慢慢搞明白些了,但有时别 ...

  7. UDP编程中client和server中使用recvfrom和sendto的区别

    client中:      sendto(sfd,buf,strlen(buf),0,(struct sockaddr *)&saddr,len);      recvfrom(sfd,buf ...

  8. Attribute在.net编程中的应用

    Attribute FYI Link: Attribute在.net编程中的应用(一) Attribute在.net编程中的应用(二) Attribute在.net编程中的应用(三) Attribut ...

  9. TCP/IP网络编程中socket的行为

    一. read/write的语义:为什么会阻塞? 先从write说起: #include <unistd.h>ssize_t write(int fd, const void *buf, ...

随机推荐

  1. 笔记-scrapy-pipeline

    笔记-scrapy-pipeline 1.简介 scrapy抓取数据后,使用yield发送item对象至pipeline,pipeline顺序对item进行处理. 一般用于: 清洗,验证,检查数据: ...

  2. 3. 与服务器对话:理解 HTTP 协议

    0.服务器与本地交换机制 2.详解HTtp服务 (1)与服务器对话的流程 (2)Reque 请求 (3)Response 响应 200 成功 404 没有网页 (4)Get/Post区别 get查询数 ...

  3. Ensure that you have installed a JDK (not just a JRE) and configured your JAVA_HOME system variable

    编译的时候出现这个,我从svn download下来的代码,运行就报这个错. 当时我还无知的大吼,怎么可能没有配置java_home, 运行了java -version 都显示出来1.8了. 后来,让 ...

  4. python的列表生成式和生成器

    1.列表生成式是Python受欢迎的语法之一,通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理,语法格式为: [exp for val in collection if co ...

  5. 用swoole实现nginx日志解析

    1.原技术路线解析 在nging配置中将日志信息交给syslog处理,rsyslog配置中将数据传递给了514端口解析,然后将解析好的数据传入elasticsearch中. nginx配置 serve ...

  6. 剑指Offer - 九度1388 - 跳台阶

    剑指Offer - 九度1388 - 跳台阶2013-11-24 03:43 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 输入: 输入可能包 ...

  7. 《Cracking the Coding Interview》——第13章:C和C++——题目3

    2014-04-25 19:42 题目:C++中虚函数的工作原理? 解法:虚函数表?细节呢?要是懂汇编我就能钻的再深点了.我试着写了点测大小.打印指针地址之类的代码,能起点管中窥豹的作用,从编译器的外 ...

  8. Python 3基础教程16-类

    本文介绍类和简单使用,类是需要class这个关键字来声明的,一般如下面的语法: class className: def fun1(): pass def fun2(): pass 看下面demo.p ...

  9. 1、shader简介、渲染管线

    vs对于shader的插件:http://blog.shuiguzi.com/shaderlabvs-release-page.html 计算机有一块重要的组成部分,就是“显卡”,大家玩游戏的话,肯定 ...

  10. django-settings里redis连接与缓存配置

    # Django-redis的缓存配置 CACHES = { "default": { "BACKEND": "django_redis.cache. ...