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

头文件: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. protobuf-2.5.0的下载与安装

    1.下载 Hadoop使用protocol buffer进行通信,需要下载和安装protobuf-2.5.0.tar.gz.由于现在protobuf-2.5.0.tar.gz已经无法在官网https: ...

  2. 2139: road

    把a[i], b[i]分开来排序 对应位置上的点连边 感性理解这是最小的 会连出若干个环 要使得若干个环连成大环 令a[i]向b[i - 1] 连边 易证一定能使图联通 感性理解这也是最小的 #inc ...

  3. jsonp、瀑布流布局、组合搜索、多级评论(评论树)、Tornado初识

    1.JSONP原理剖析以及实现 1.1 同源策略限制 用django分别建立两个项目,jsonp01和jsonp02,然后再在这两个项目里分别建立一个app,比如名字叫jsonp1.jsonp2:js ...

  4. nodejs下载图片到本地,根据百度图片查找相应的图片,通过nodejs保存到本地文件夹

    根据百度图片查找相应的图片:输入图片关键字,输入图片数量(默认是30条),通过nodejs将批量保存图片到本地文件夹. 代码已上传到github上:代码github的地址 下载后进去back-end: ...

  5. elk-filebeat收集docker容器日志

    目录 使用docker搭建elk filebeat安装与配置 docker容器设置 参考文章 首发地址 使用docker搭建elk 1.使用docker-compose文件构建elk.文件如下: ve ...

  6. leetcode 208. 实现 Trie (前缀树)

    实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie(); trie.insert(" ...

  7. php天龙八部

    <?php /* 一.操作步骤: 连接MySQL数据库 判断是否连接成功 选择数据库 设置字符集 准备SQL语句 向MySQL服务发送SQL语句 解析处理结果集 释放结果集,关闭数据库连接 */ ...

  8. linux 出错 “INFO: task xxxxxx: 634 blocked for more than 120 seconds.”的3种解决方案(转)

    linux 出错 “INFO: task xxxxxx: 634 blocked for more than 120 seconds.”的3种解决方案 1 问题描述 服务器内存满了,ssh登录失败 , ...

  9. 九宫重排_康拓展开_bfs

      历届试题 九宫重排   时间限制:1.0s   内存限制:256.0MB        问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可 ...

  10. 团队冲刺Alpha(十)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...