编程中的runtime_error问题
前几天在编程中,代码如下:
头文件: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问题的更多相关文章
- 你不知道的this—JS异步编程中的this
Javascript小学生都知道了javascript中的函数调用时会 隐性的接收两个附加的参数:this和arguments.参数this在javascript编程中占据中非常重要的地位,它的值取决 ...
- Java EE 编程中路径
版权声明:未经博主允许,不得转载 首先我们要限定一个范围,是一个项目,或是以个访问地址..就先以一个项目为限定的范围 前述: 学过物理学的都知道相对运动和绝对运动, 虽然是相似的概念,但这里的要简单得 ...
- 并发编程中.net与java的一些对比
Java在并发编程中进行使用java.util.concurrent.atomic来处理一些轻量级变量 如AtomicInteger AtomicBoolean等 .Net中则使用Interlocke ...
- Java编程中“为了性能”尽量要做到的一些地方
最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源总结的一些在Ja ...
- 第51讲:Scala中链式调用风格的实现代码实战及其在Spark编程中的广泛运用
今天学习了下scala中的链式调用风格的实现,在spark编程中,我们经常会看到如下一段代码: sc.textFile("hdfs://......").flatMap(_.spl ...
- Windows编程中UNICODE和_UNICODE定义问题
Windows编程中UNICODE和_UNICODE定义问题 先转一篇文章: 初学Windows SDK编程时碰到过这个问题,相信很多初学Windows编程的人也都碰到过,后来慢慢搞明白些了,但有时别 ...
- UDP编程中client和server中使用recvfrom和sendto的区别
client中: sendto(sfd,buf,strlen(buf),0,(struct sockaddr *)&saddr,len); recvfrom(sfd,buf ...
- Attribute在.net编程中的应用
Attribute FYI Link: Attribute在.net编程中的应用(一) Attribute在.net编程中的应用(二) Attribute在.net编程中的应用(三) Attribut ...
- TCP/IP网络编程中socket的行为
一. read/write的语义:为什么会阻塞? 先从write说起: #include <unistd.h>ssize_t write(int fd, const void *buf, ...
随机推荐
- protobuf-2.5.0的下载与安装
1.下载 Hadoop使用protocol buffer进行通信,需要下载和安装protobuf-2.5.0.tar.gz.由于现在protobuf-2.5.0.tar.gz已经无法在官网https: ...
- 2139: road
把a[i], b[i]分开来排序 对应位置上的点连边 感性理解这是最小的 会连出若干个环 要使得若干个环连成大环 令a[i]向b[i - 1] 连边 易证一定能使图联通 感性理解这也是最小的 #inc ...
- jsonp、瀑布流布局、组合搜索、多级评论(评论树)、Tornado初识
1.JSONP原理剖析以及实现 1.1 同源策略限制 用django分别建立两个项目,jsonp01和jsonp02,然后再在这两个项目里分别建立一个app,比如名字叫jsonp1.jsonp2:js ...
- nodejs下载图片到本地,根据百度图片查找相应的图片,通过nodejs保存到本地文件夹
根据百度图片查找相应的图片:输入图片关键字,输入图片数量(默认是30条),通过nodejs将批量保存图片到本地文件夹. 代码已上传到github上:代码github的地址 下载后进去back-end: ...
- elk-filebeat收集docker容器日志
目录 使用docker搭建elk filebeat安装与配置 docker容器设置 参考文章 首发地址 使用docker搭建elk 1.使用docker-compose文件构建elk.文件如下: ve ...
- leetcode 208. 实现 Trie (前缀树)
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie(); trie.insert(" ...
- php天龙八部
<?php /* 一.操作步骤: 连接MySQL数据库 判断是否连接成功 选择数据库 设置字符集 准备SQL语句 向MySQL服务发送SQL语句 解析处理结果集 释放结果集,关闭数据库连接 */ ...
- 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登录失败 , ...
- 九宫重排_康拓展开_bfs
历届试题 九宫重排 时间限制:1.0s 内存限制:256.0MB 问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可 ...
- 团队冲刺Alpha(十)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...