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

头文件: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. 009---Django的模型层(1)

    ORM 全称:对象--关系--映射 数据表----类 数据行----对象 字 段----属性优势:专注于后端逻辑,不用写复杂的sql语句劣势:会忘掉sql,牺牲了效率 Django连接mysql数据库 ...

  2. Web性能测试问题,mysql分析之一

    在做性能测试执行中,发现性能很慢,顺藤摸瓜找一下是什么问题? 并发40个用XXX场景 1.运行过程中监控mysql数据库的CPU过高,达到65%: %CPU   %Mem  %Disk   %Net ...

  3. WPF仿酷狗页面

    原文:WPF仿酷狗页面 版权声明:本文为博主原创文章,如需转载请标明转载地址 http://blog.csdn.net/u013981858 https://blog.csdn.net/u013981 ...

  4. [bzoj1552][Cerc2007]robotic sort&&[bzoj3506][Cqoi2014]排序机械臂

    非常垃圾的一道平衡树,结果被日了一天.很难受嗷嗷嗷 首先不得不说网上的题解让我这个本来就不熟悉平衡树的彩笔很难受——并不好理解. 还好Sinogi大佬非常的神,一眼就切掉了,而且用更加美妙的解法. 题 ...

  5. SpringMVC集成RSA加密算法

    技术交流群: 233513714 本文介绍的是RSA加密算法+Spring Security在SpringMVC中的集成使用. Spring Security是什么? 引用: Spring Secur ...

  6. android什么时候会产生ANR

    ANR: Application No Response 1.界面操作(按钮点击)等待时间超过5秒 2.HandleMessage 回调函数中执行超过10秒(进行长时间处理不放在主界面,放在另一个线程 ...

  7. CodeIgniter学习笔记一:基本结构、控制器、视图、超级对象、数据库

    一.基本结构 CodeIgniter3.0.0解压后有8个文件,分别是: application:项目文件 system:系统(框架)文件,为方便升级,不建议修改 user_guid:用户手册,不需要 ...

  8. shell脚本批量下载资源并保留路径

    示例资源列表 如url.txt: http://su.bdimg.com/static/superplus/img/logo_white_ee663702.png http://su.bdimg.co ...

  9. appium+python的APP自动化(1)

    写这个东西也是自己喜欢研究些自动化的东西,以下全是自己的经验所得,由于开源的软件对于各版本以及操作系统要求很高,会经常碰到一些不兼容的问题,这个都属于正常的,换版本就对了. 本人的环境搭建都是在win ...

  10. Linux系统源码安装cloud-init

    参考:https://cloud.tencent.com/document/product/213/12587使用以下命令下载 cloud-init 源码包 官网下载地址:https://launch ...