C++(四十六) — 异常处理机制、标准IO输入输出
1、异常处理机制
一般来说,异常处理就是在程序运行时对异常进行检测和控制。而在C++ 中,使用 try-throw-catch模式进行异常处理的机制。
#include<iostream>
using namespace std; int Fib(int n)
{
if (n <= )
throw n;
if (n >= )
throw "n>=47 overflow";
if (n == || n == )
return ;
else
return Fib(n - ) + Fib(n - );
} void main()
{
int n, fn;
try
{
cin >> n;
cout << Fib(n) << endl;
}
catch (int m)
{
cout << "运行D异常,n=" << m << endl;
}
catch (char *s)
{
cout << s << endl;
}
system("pause");
}
注意:
(1)C++中,异常的引发和处理不在一个函数中,上层可以根据不同类型的异常进行处理;按照栈模型处理,一层层传递;
(2)如果 接受异常的时候,使用一个异常变量,则copy 构造异常变量;
(3)使用 引用的话,会使用 throw 时候的那个对象;
(4)指针可以和引用、元素写在一起,但是 引用 和 元素 不能写在一起;
(5)类对象时,使用引用比较合适。
2、标准IO输入输出关系图
iostream 是输入/输出流类,由 istream、ostream 两个基类共同派生出来。

3、标准输入流对象
(1)cin.ignore(2); //忽略两个字符位置
#include<iostream>
using namespace std; //标准输入流对象 cin void main()
{
/*
// 输入遇到 空格 即停止接受数据,
char mybuf[1024];
int myInt;
*/ // 读取数据时包含 空格
char ch,a,b,c;
while ((ch = cin.get()) != EOF)//ctrl+z 结束
{
cout << ch << endl;
} cin.get(a);// 只读取缓冲区的第一个字符
cin.get(b);
cin.get(a).get(b);//因为返回的是引用,所以可以链式编程 // getline():可以从输入流中读取多个字符,可以指定输入终止字符(默认是换行符),
// 读取完成后,从读取的内容中删除该终止符。
//输入:aa bb cc dd
//输出:buf1:aa ,buf2: bb cc dd
char buf1[], buf2[];
cin >> buf1;//只保存第一个,遇到空格即停止
cin.getline(buf2, );//保存空格,遇到 换行符 即停止。 system("pause");
}
4、标准输出流对象
- cout:标准输出,缓冲区满时被输出;
- cerr:标准错误输出,没有缓冲,发送给他的内容立即被输出;
- clog:类似于 cerr, 但是有缓冲,缓冲区满时被输出;
使用成员函数或者操作符设置输出格式,操作符在标准头文件 iomanip 中定义。
- cout.put('h').put('e') << endl;:输出单个字符;
char *p = "hello";
cout << *p << endl;//只输出第一个字符
cout.write(p, strlen(p)) << endl; //对于指针内容的输出,可以控制输出内容的大小
cout.write(p, strlen(p)-2) << endl;- stefill('*')、fill('*'):设置填充字符为 *;
- setw(n) 、width(n):设置输出宽度
- setprecision(n) 、precision(n):显示小数精度为 n 位
- left 、right:左对齐、右对齐
- dec、 hex 、oct:十进制、十六进制、八进制
C++(四十六) — 异常处理机制、标准IO输入输出的更多相关文章
- NeHe OpenGL教程 第四十六课:全屏反走样
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 四十六、android中的Bitmap
四十六.android中的Bitmap: http://www.cnblogs.com/linjiqin/archive/2011/12/28/2304940.html 四十七.实现调用Android ...
- Android简易实战教程--第四十六话《RecyclerView竖向和横向滚动》
Android5.X后,引入了RecyclerView,这个控件使用起来非常的方便,不但可以完成listView的效果,而且还可以实现ListView无法实现的效果.当然,在新能方便也做了大大的提高. ...
- “全栈2019”Java第四十六章:继承与字段
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 第四十六个知识点 在Sigma协议中,正确性,公正性和零知识性意味着什么
第四十六个知识点 在Sigma协议中,正确性,公正性和零知识性意味着什么 Sigma协议 Sigma协议是Alice想要向Bob证明一些东西的协议(Alice知道一些秘密).他们有下面的一般范式:Al ...
- Python笔记(四):异常处理机制与 open()
(一) 异常处理机制概述 就像日常生活中会遇到各种意外情况一样(例如:你可能考虑过如果中了500w该怎么做),代码运行过程中也会遇到这种意外情况,python提供了这么一种机制,处理意外情况(就像如 ...
- abp(net core)+easyui+efcore实现仓储管理系统——入库管理之十(四十六)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- Deep learning:四十六(DropConnect简单理解)
和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...
- Python之路(第四十六篇)多种方法实现python线程池(threadpool模块\multiprocessing.dummy模块\concurrent.futures模块)
一.线程池 很久(python2.6)之前python没有官方的线程池模块,只有第三方的threadpool模块, 之后再python2.6加入了multiprocessing.dummy 作为可以使 ...
随机推荐
- SSAS 项目部署失败的问题
在创建SSAS项目过程中,创建数据源.数据源视图.多维数据集.纬度等一切都没有问题.但是在“进程”这一步的时候,发现总是报错,提示如下.OLE DB 错误: OLE DB 或 ODBC 错误 : 用户 ...
- python中实现延时回调普通函数示例代码
python中实现延时回调普通函数示例代码 这篇文章主要给大家介绍了关于python中实现延时回调普通函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的 ...
- rxjs debounceTime减少搜索的频率
debounceTime用来降低事件的触发频率 ,接收以毫秒为单位的参数 它所做的操作是,在一定时间范围内不管产生了多少事件,它只放第一个过去,剩下的都将舍弃 html: <div class= ...
- SQLite数据库简介和使用
一.Sqlite简介: SQLite (http://www.sqlite.org/),是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中 ...
- [转帖]插曲:大白话带你认识Kafka
插曲:大白话带你认识Kafka 2019-11-18 21:58:27 从事Java 阅读数 2更多 分类专栏: java Kafaka 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA ...
- [转帖]教你如何破解IC卡的校验值
教你如何破解IC卡的校验值 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin ...
- Lock Free (无锁并发)
CAS( compare and swap) 原子操作,保证了如果需要更新的地址没有被其他进程(线程)改动过,那么它可以安全的写入.而这也是我们对于某个数据或者数据结构加锁要保护的内容,保证读写的一致 ...
- C++ 二叉搜索树原理及其实现
首先是概念:二叉搜索树又称二叉排序树,它具有以下的性质: 若是左子树不为空,则左子树上所有节点的值小于根节点的值 若是右子树不为空,则右子树上所有结点的值大于根节点的值 二叉搜索树的左右子树也是二叉搜 ...
- Flask源码之:路由加载
路由加载整体思路: 1. 将 url = /index 和 methods = [GET,POST] 和 endpoint = "index"封装到Rule对象 2. 将Ru ...
- java的线程池的使用
1.线程池的创建 1.首先创建一个类,然后实现Runnable接口 public class ExectorTest implements Runnable {} 2.首先声明一个线程池的全局变量 p ...