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

头文件: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. C# 不同窗口传递参数

    form1: private void button1_Click(object sender, System.EventArgs e) { Form2 frm = new Form2(); frm. ...

  2. wordCount的执行流程

    我们对于wordCount的这个流程,在清晰不过了,不过我们在使用spark以及hadoop本身的mapReduce的时候,我们是否理解其中的原理呢,今天我们就来介绍一下wordCount的执行原理, ...

  3. Android面试收集录7 AsyncTask详解

    1.Android中的线程 在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制地产生, 并且 **线程的创建和销毁都会有相应的开销.**当系统中存在大量的线 ...

  4. 2018"百度之星"程序设计大赛 - 资格赛 - 题集

    1001 $ 1 \leq m \leq 10 $ 像是状压的复杂度. 于是我们(用二进制)枚举留下的问题集合 然后把这个集合和问卷们的答案集合 $ & $ 一下 就可以只留下被选中的问题的答 ...

  5. Spark Streaming实例

    Spark Streaming实例分析 2015-02-02 21:00 4343人阅读 评论(0) 收藏 举报  分类: spark(11)  转载地址:http://www.aboutyun.co ...

  6. 打包成apk,生成apk文件,上传到网站服务器提供链接下载

    Android开发把项目打包成apk: 做完一个Android项目之后,如何才能把项目发布到Internet上供别人使用呢?我们需要将自己的程序打包成Android安装包文件--APK(Android ...

  7. 【转载】Unity3D研究院之静态自动检查代码缺陷与隐患

    代码缺陷和代码错误的最大区别是,代码缺陷不影响游戏编译,而代码错误编译都不通过.但是代码缺陷会影响游戏发布后产生的一系列BUG..我今天无意间逛外国论坛发现的一个方法,使用了一下感觉挺给力的第一时间分 ...

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

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

  9. Python——数据类型之str

    本篇主要内容: 1.str元素的访问 2.str内置43个方法使用示例 str就是储存各种东西的字符串. 他的方法也是最多的...有各种各样的神奇魔法. 1.str的访问,str可以想列表那样访问每一 ...

  10. 201621123033 《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 父类 子类 继承 覆盖 抽象 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一般不需要出现过多的字. 1.3 可选: ...