标准I/O对象:cin,cout,cerr,clog

  • cout; //全局流对象 输出数据到显示器
  • cin; //cerr没有缓冲区 clog有缓冲区
  • cerr; //标准错误 输出数据到显示器
  • clog; //标准日志 输出数据到显示器

一、标准输入流

cin.get()

//一次只能读取一个字符

	char ch;
while ((ch = cin.get()) != EOF){//EOF就是键盘Ctrl+z,常被作为结束的标志
cout << ch << endl;
}
/*
结果:
cin
c
i
n
*/
cin.get(一个参数)

//读一个字符

	char ch2;
cin.get(ch2); //读取一个字符
cout << ch2 << endl;
/*
结果:
cin
c
*/
cin.get(三个参数)

//可以读字符串

	char buf[256] = { 0 };
cin.get(buf, 256); //从缓冲区读一个字符串
cout << buf;
/*
结果:
输入:cin.get() 111
输出:cin.get() 111
*/
cin.getline()
	char buf[256] = { 0 };
cin.getline(buf, 256); //读取一行数据
cout << buf;
/*
输入:cin.getline() cin.get()
输出:cin.getline() cin.get()
*/
cin.ignore()

有时候你只想取缓冲区的一部分,而舍弃另一部分,这是就可以使用cin.ignore(),其使用方法是:

cin.ignore(int intExp, char chExp);

其中intExp 是一个整型表达式,也可以是一个整型数值,这个数值表示在一行中忽略的字符的最大数目,比如说intExp=100;还有一个参数chExp,是一个字符表达式。表示如果遇到一个字符值等于chEXP,那么就停止ignore(),如果ignore100个字符之后还没遇到值等于chEXP的字符,那也得停止ignore(),所以100是ignore()所忽略的最大字符数。

	char ch;
cin.get(ch); //从缓冲区要数据 阻塞
cout << ch << endl;
cin.ignore(10); //忽略当前字符 从缓冲区取走了
cin.get(ch);
cout << ch << endl;
/*
结果:
输入:asdfghjklzxcvbnm
输出:a
c
*/
cin.peek()

此函数返回输入流中的下一个字符,但是并不将该字符从输入流中取走——相当于只是看了一眼下一个字符,因此叫 peek。

cin.peek() 不会跳过输入流中的空格、回车符。在输入流已经结束的情况下,cin.peek() 返回 EOF。

在输入数据的格式不同,需要预先判断格式再决定如何输入时,peek() 就能起到作用。

cout << "请输入数组或者字符串:" << endl;
char ch;
ch = cin.peek(); //偷窥一下缓冲区,返回第一个字符
if (ch >= '0' && ch <= '9') { int number;
cin >> number;
cout << "您输入的是数字:" << number << endl; }
else {
char buf[256] = { 0 };
cin >> buf;
cout << "您输入的是字符串:" << buf << endl;
}
/*
结果:
请输入数组或者字符串:
acdsf
您输入的是字符串:acdsf
*/
cin.putback()

iostream是一个类,有自己的buffer。你每次cin>>a,它就把buffer减一,放到a中去。cin.putback(a)就是把a的内容放回buffer中。

	cout << "请输入字符串或者数字:" << endl;
char ch;
cin.get(ch); //从缓冲区取走一个字符
if (ch >= '0' && ch <= '9') {
//ch放回到缓冲区
cin.putback(ch);
int number;
cin >> number;
cout << "您输入的是数字:" << number << endl;
}
else {
cin.putback(ch);
char buf[256] = { 0 };
cin >> buf;
cout << buf << endl;
}
/*
结果:
请输入字符串或者数字:
33333
您输入的是数字:33333
*/

二、标准输出流

cout.flush()

所要输出的内容会先存入缓冲区,而 cout.flush()的作用正是强行将缓冲区的数据清空。这样在关闭读写流时,就不会丢失数据。

cout.put()

cout.put()专用于向输出流缓冲区中添加单个字符,

cout.write()

write() 成员方法专用于向输出流缓冲区中添加指定的字符串,初学者可以简单的理解为输出指定的字符串。其语法格式如下:

ostream&write(const char * s,streamsize n);

其中,s 用于指定某个长度至少为 n 的字符数组或字符串;n 表示要输出的前 n 个字符。

	cout << "hello world" <<endl;
//cout.flush();
cout.put('h').put('e').put('l') << endl;
cout.write("hello Zhaosi!", strlen("hello Zhaosi!"));
/*
结果:
hello world
hel
hello Zhaosi!
*/
cout.width()
  • 控制符int width()将用来调整字段的宽度,因为width是成员函数,所以要通过对象来调用,比如cout.width()将显示当前的字段宽度,默认为0,而cout.width(3)将把字段宽度设定为3。注意C++容纳字段的方式为给字段分配刚好合适的宽度来容纳字段,所以C++中默认的字段宽度为0,以适合于所有的字段。
  • width的默认对齐方式为右对齐,即如果cout.width(12)如果字段没有这么宽,则将在字段的左边填以空格来达到12个字段的宽度。
  • 还要注意的是width只影响他设置后的下一个输出,再下一个字段输出后,后继的字段被恢复为默认值,比如cout.width(12); cout<<2<<3;则输出2时会以12字段的宽度显示,但显示3时就会以默认的方式显示了。
  • int width()调用他时将会反回上一次的字段宽度的值。
cout.fill()

成员函数fill()可以用来改变填充的字符,比如cout.fill('*'),使用*填充空白部分。

但是千万要注意:fill函数在设置后将一直有效,除非被重新设定。

而且cout.fill('*')会返回设置'*'之前的fill字符' ' 所以如果用cout<<cout.fill('*')就会输出这个空格

cout.setf(标记)

cout.setf()的作用是通过设置格式标志来控制输出形式

  • 1.使用控制符控制输出格式

    控制符 作用

    dec 设置整数的基数为10

    hex 设置整数的基数为16

    oct 设置整数的基数为8

    setbase(n) 设置整数的基数为n(n只能是16,10,8之一)

    setfill(c) 设置填充字符c,c可以是字符常量或字符变量

    setprecision(n) 设置实数的精度为n位.在以一般十进制小数形式输出时,n代表有效数字.在以fixed(固定小数位数)形式和scientific(指数)形式输出时,n为小数位数.

    setw(n) 设置字段宽度为n位.

    setiosflags(ios::fixed) 设置浮点数以固定的小数位数显示.

    setiosflags(ios::scientific) 设置浮点数以科学计数法(即指数形式)显示.

    setiosflags(ios::left) 输出数据左对齐.

    setiosflags(ios::right) 输出数据右对齐.

    setiosflags(ios::shipws) 忽略前导的空格.

    setiosflags(ios::uppercase) 在以科学计数法输出E和十六进制输出字母X时,以大写表示.

    setiosflags(ios::showpos) 输出正数时,给出“+”号.

    resetiosflags 终止已设置的输出格式状态,在括号中应指定内容.
  • 2.用流对象的成员控制输出格式

    流成员函数 与之作用相同的控制符 作用

    precision(n) setprecision(n) 设置实数的精度为n位.

    width(n) setw(n) 设置字段宽度为n位.

    fill(c) setfill(c) 设置填充字符c.

    setf( ) setiosflags( ) 设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中内容相同.

    ubsetf( ) resetiosflags( ) 终止已设置的输出格式状态.

    cout.width(10);

    cout.setf(ios::hex);
  • 3.设置格式状态的格式标志

    格式标志 作用

    ios::left 输出数据在本域宽范围内左对齐

    ios::right 输出数据在本域宽范围内右对齐

    ios::internal 数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充

    ios::dec 设置整数的基数为10

    ios::oct 设置整数的基数为8

    ios::hex 设置整数的基数为16

    ios::showbase 强制输出整数的基数(八进制以0打头,十六进制以0x打头)

    ios::showpoint 强制输出浮点数的小点和尾数0

    ios::uppercase 在以科学计数法输出E和十六进制输出字母X时,以大写表示

    ios::showpos 输出正数时,给出“+”号.

    ios::scientific 设置浮点数以科学计数法(即指数形式)显示

    ios::fixed 设置浮点数以固定的小数位数显示

    ios::unitbuf 每次输出后刷新所有流

    ios::stdio 每次输出后清除stdout,stderr
	//成员方法的方式
int number = 10;
cout << number << endl;
cout.unsetf(ios::dec); //卸载当前默认的的10进制输出方式
cout.setf(ios::oct); //八进制输出
cout.setf(ios::showbase);
cout << number << endl;
cout.unsetf(ios::oct); //卸载8进制
cout.setf(ios::hex);
cout << number << endl; cout.width(10);
cout.fill('*');
cout.setf(ios::left);
cout << number << endl; //通过控制符
int number2 = 10;
cout << hex
<< setiosflags(ios::showbase)
<< setw(10)
<< setfill('*')
<< setiosflags(ios::left)
<< number2
<< endl;
/*
结果:
10
012
0xa
0xa*******
0xa*******
*/

C++:标准I/O流的更多相关文章

  1. CSS的三种手段让元素脱离标准本文档流——浮动、绝对定位、固定定位

    1.浮动 浮动是CSS中用到的最多的一个选项,他有三个性质.关于浮动我们要强调一点,永远不是一个东西单独浮动,浮动都是一起浮动,要浮动,大家都浮动. 1.1 浮动元素脱离标准文档流 1.1.1 大概描 ...

  2. 浅谈,html\css脱离标准文档流相关

    (个人知识有限,难免有误,请见谅) 标准文档流,顾名思义,是要按照一定规矩排列的,默认的就是元素会从左至右,从上至下排列,块级会独占一行,行内元素会和小伙伴们共享一行. 本来在标准文档流下,各个元素相 ...

  3. 页面标准文档流、浮动层、float属性(转)

    CSS float 浮动属性介绍 float属性:定义元素朝哪个方向浮动. 1.页面标准文档流.浮动层.float属性 1.1 文档流 HTML页面的标准文档流(默认布局)是:从上到下,从左到右,遇块 ...

  4. Unit 6.标准文档流,浮动,清除浮动以及margin塌陷问题

    一. 什么是标准文档流 文本流其实就是文档的读取和输出顺序,也就是我们通常看到的由左到右.由上而下的读取和输出形式,在网页中每个元素都是按照这个顺序进行排序和显示的,而float和position两个 ...

  5. python全栈开发 * 继承性 层叠性 盒模型 标准文档流 * 180809

    ---恢复内容开始--- 一继承性 1.继承: 给父级设置一些属性,子级继承了父级的该属性,这就是我们的css中的继承. 2. 可继承: color . font-*(size). text-*(de ...

  6. css标准文档流

    css标准文档流 所谓的标准文档流指的是网页当中的一个渲染顺序,就如同人类读书一样,从上向下,从左向右.网页的渲染顺序也是如此.而我们使用的标签默认都是存在于标准文档流当中. 标准文档流当中的特性 空 ...

  7. day 41 标准文档流 浮动

    一.标准文档流 什么是标准文档流 宏观的将,我们的web页面和ps等设计软件有本质的区别,web 网页的制作,是个“流”,从上而下 ,像 “织毛衣”.而设计软件 ,想往哪里画东西,就去哪里画 标准文档 ...

  8. python 全栈开发,Day48(标准文档流,块级元素和行内元素,浮动,margin的用法,文本属性和字体属性)

    昨日内容回顾 高级选择器: 后代选择 : div p 子代选择器 : div>p 并集选择器: div,p 交集选择器: div.active 属性选择器: [属性~='属性值'] 伪类选择器 ...

  9. {03--CSS布局设置} 盒模型 二 padding bode margin 标准文档流 块级元素和行内元素 浮动 margin的用法 文本属性和字体属性 超链接导航栏 background 定位 z-index

    03--CSS布局设置 本节目录 一 盒模型 二 padding(内边距) 三 boder(边框) 四 简单认识一下margin(外边距) 五 标准文档流 六 块级元素和行内元素 七 浮动 八 mar ...

  10. padding(内边框), border(边框), margin, 标准文档流, 块级元素和行内元素, 浮动 ,margin的用法

    盒模型 在CSS中,"box model"这一术语是用来设计和布局时使用,然后在网页中基本上都会显示一些方方正正的盒子.我们称为这种盒子叫盒模型. 盒模型有两种:标准模型和IE模型 ...

随机推荐

  1. angular 8 表单带文件上传接口

    <div id="homework"> <form (ngSubmit)="doSubmit()" enctype="multipa ...

  2. 自学python,从小白到大神,需要多久?

    2020年10月 TIOBE 排行榜超过了 Java, 历史上首次 Python 超越了 Java ,再次让许多朋友对 Python 产生了兴趣,今天我们来梳理下学习 Python 几个阶段或者级别, ...

  3. pytorch固定BN层参数

    背景:基于PyTorch的模型,想固定主分支参数,只训练子分支,结果发现在不同epoch相同的测试数据经过主分支输出的结果不同. 原因:未固定主分支BN层中的running_mean和running_ ...

  4. OSPF --- 不规则区域实验

    OSPF不规则区域实验: 一.知识点整理: OSPF中路由器的角色(看图): 骨干路由器:路由器所有接口属于area 0  -->R3 非骨干路由器:路由器所有接口属于非area 0  --&g ...

  5. Python 最简单的数字相乘

    风变编程第18关,快要结束了,捎带着复习了一下前面的基础.结果悲剧了. 打开题目是这样的: 比如我们想写一个根据圆的半径(R)来求面积(S)和周长(L)的代码,可以画出以下的流程图 抬眼一看,好简单的 ...

  6. Liunx运维(六)-文件备份与压缩命令

    文档目录: 一.tar:打包备份 二.gzip:压缩或解压文件 三.zip:打包和压缩文件 四.unzip:解压zip文件 五.scp:远程文件复制 六.rsync:文件同步工具 ---------- ...

  7. 在.NET Core 中收集数据的几种方式

    APM是一种应用性能监控工具,可以帮助理解系统行为, 用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题, 通过汇聚业务系统各处理环节的实时数据,分析业务系统各事务处理的交易路径和处理 ...

  8. vue-element-admin项目核心总结

    1.搭建项目 按照官方文档把整个项目下载下来,安装依赖包npm install, 然后npm run dev 启动项目. 2.项目自定义优化 删除不要的文件,启动项目登录后,发现里面有很多页面,对我们 ...

  9. 高端面试必备:一个Java对象占用多大内存

    这个问题一般会出现在稍微高端一点的 Java 面试环节.要求面试者不仅对 Java 基础知识熟悉,更重要的是要了解内存模型. Java 对象模型 HotSpot JVM 使用名为 oops (Ordi ...

  10. flowable的多人会签和一票否决

    项目结构: 接下来代码: Duorenhuiqian.bpmn20.xml: <?xml version="1.0" encoding="UTF-8"?& ...