c++中IO输入输出流总结<一>
1 io类图关系

1.1 简化形式

1.1.2补充
iostream:
istream:从流中读取
ostream:写入到流
iosteram:读写流
fstream:
ifstream:从文件读
ofstream:写入文件
fstream:读写文件
2 流综述
2.1什么情况会导致刷缓冲
(1)程序正常结束,作为main函数结束的一部分将清空所有的缓冲区
(2)缓冲区满会刷缓冲
(3)endl flush刷缓冲
(4)在每次输出操作执行完后用unitbuf操作符设置流内部状态从而清空缓冲区
2.2 标准输出
输出流对象:cout,cerr,clog
2.2.1格式化输出iomanip
(1)相关控制符和功能如下图所示


(2)用格式控制符控制输出(记得包括头文件iomanip哦 下面也是)
int main()
{ int n = ;
cout << "设置进制:" << endl;
cout << "十进制" << n << endl;
cout << "十六进制" << hex << n << endl;
cout << "八进制" << oct << n << endl;
cout << "十进制" << dec << n << endl;
cin.get();
return ;
}
(3)设置域宽::::setw(n)n小于实际宽度按照实际宽度输出
int main()
{
int m = ;
cout << "设置域宽" << endl;
cout << setw() << m << endl;//
cout << setw() << m << endl;//
cout << setw() << m << endl;//
cin.get(); return ;
}
(4)设置填充字符setfil。。。。。需要和setw一起使用
int main6()
{
int x = ;
cout << "设置填充字符" << endl;
cout << setfill('*')<<setw()<<x<< endl;//*1234
cout << setw()<<x<< endl;// ******1234 cin.get();
return ;
}
(5)设置对齐方式setiosflags(ios::left/right)
int main7()
{
int y = ;
cout << "设置对齐方式" << endl;
cout << setfill(' ');
cout << setiosflags(ios::left) << setw() << y << endl;
cout << setiosflags(ios::right) << setw() << y << endl; cin.get();
return ; }
(6)显示小数点和正负数符号
int main8()
{
double d1 = / , d2 = 22.0 / ;
cout << "显示小数点尾和数符" << endl;
cout << d1 << endl;//2
//2.00000
cout << setiosflags(ios::showpoint) << d1 << endl;
//+3.14286强制显示符号
cout << setiosflags(ios::showpos) << d2 << endl;
//+3.14286
cout << d2 << endl;
cin.get();
return ; }
(7)设置进度
int main10()
{
double dd = 123.4567;
//1.2e+002
cout << setprecision() << dd << endl;
//
cout << setprecision() << dd << endl;
//123.5
cout << setprecision() << dd << endl;
//123.46这里会四舍五入
cout << setprecision() << dd << endl;
cin.get();
return ; }
3 标准输入cin
3.1 成员函数get
char get() 输入一个字符并返回(回车 tab等)
istream& get(char &)//实现链式编程
int main()
{
char ch;
while(cin.get(ch))
{
cout.put(ch);
}
return ;
}
istream& get(char*,int,char)//从输入流读取N-1字符,赋给字符数组
情况1:
int main()
{
char buf[]; cin.get(buf, , '/');
//cin.ignore(1);
cout << buf << endl;
cin.get(buf, , '/'); cout << buf << endl;
system("pause");
}

备注:这里没有ignore 按照字符/截断了
情况2:丢失了c
int main()
{
char buf[]; cin.get(buf, , '/');//输入i love china/ i love tianchao/
cin.ignore(,'c');
cout << buf << endl;
cin.get(buf, , '/'); cout << buf << endl;
system("pause");
}

情况三:退回到c
int main()
{
char buf[]; cin.get(buf, , '/');
cin.ignore(,'c');//忽略到c字符位置 保存后面的值
cin.putback('c');
cout << buf << endl;
cin.get(buf, , '/'); cout << buf << endl;
system("pause");
}

peek
int main()
{
char buf[]; cin.get(buf, , '/');
cin.ignore(,'c');//忽略到c字符位置 保存后面的值
cin.putback('c');//退回c char peek = cin.peek();
cout << "peek"<<peek << endl; cout << buf << endl;
cin.get(buf, , '/'); cout << buf << endl;
system("pause");
}

参数:字符数组 字符个数终止字符
注意:会清空char*指向的内容 如果没有读到n-1个字符或者终止符则会阻塞
3.2 getline
istream& getline(char*,int,char)
与get不同的是在读取n-1字符之前遇到终止字符会提前结束.两者最大不同是get当遇到定界符停止当时bu'hu
cin.getline(buf,1024,'g');
c++中IO输入输出流总结<一>的更多相关文章
- c++中IO输入输出流总结<二>
1 文件的打开和关闭 1.1 定义流对象 ifsteam iflie;//文件输入流对象 ifsteam iflie;//文件输出流对象 fsteam iflie;//文件输入输出流对象 1.2 打开 ...
- 详解Java中的IO输入输出流!
目录 本片要点 基本分类 发展史 文件字符流 输出的基本结构 流中的异常处理 异常处理新方式 读取的基本结构 运用输入与输出完成复制效果 文件字节流 缓冲流 字符缓冲流 装饰设计模式 转换流(适配器) ...
- java.IO输入输出流:过滤流:buffer流和data流
java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...
- java io 输入输出流
数据流分类: 流序列中的数据既可以是未经加工的原始二进制数据, 也可以是经一定编码处理后符合某种格式规定的特定数据. 因此Java中的流分为两种: 1) 字节流:数据流中最小的数据单元是字节 2) 字 ...
- IO输入输出流
在Java中进行文件的读写,Java IO流是必备的知识. IO流指 的是输入输出流,用来处理设备上的数据.这里的设备指硬盘,内存,键盘录入,网络传输等. 按处理数据类型来分:字节流和字符流. 按流的 ...
- 全面掌握IO(输入/输出流)
File类: 程序中操作文件和目录都可以使用File类来完成即不管是文件还是目录都是使用File类来操作的,File能新建,删除,重命名文件和目录,但File不能访问文件内容本身,如果需要访问文件本身 ...
- iostream/fstream中的输入输出流指针的绑定,tie函数的使用。
为了兼容c语言的输入输出,c++里面采用tie将输入输出流经行绑定,所以cin/cout并不是独立的.当执行cin时,cout同时会被执行.反之亦然. by defalut,cin is tied ...
- Java中的输入输出流
FileInputStream和FileOutputStream 创建含磁盘文件的输入 输出流对象. FileInputStream继承自InputStream,用于读取本地文件中的字节数据,由于所有 ...
- java IO输入输出流中的各种字节流,字符流类
字节流字节流主要是操作byte类型数据,也byte数组为准,主要操作类就是·字节输出流:OutputStream·字节输入流:InputStream字符流在程序中一个字符等于2个字节,那么java提供 ...
随机推荐
- Thunderbolt雷电接口
官网:https://thunderbolttechnology.net/tech/certification
- gridcontrol复选框功能实现(超具体)
博主这几天就准备离职了,以后不再做.Net开发.因此这应该是我写的最后一篇关于dev控件的博文.既然是最后一篇,那就写的具体一些.画个圆满的省略号...... 本文介绍gridcontrol怎样实现复 ...
- 微信小程序首页index.js获取不到app.js中动态设置的globalData的原因以及解决方法
前段时间开发了一款微信小程序,运行了也几个月了,在index.js中的onLoad生命周期里获取app.js中onLaunch生命周期中在接口里动态设置的globalData一直没有问题,结果昨天就获 ...
- STL algorihtm算法iter_swap(29)
iter_swap原型: std::iter_swap template <class ForwardIterator1, class ForwardIterator2> void ite ...
- hdu5261单调队列
题意特难懂,我看了好多遍,最后还是看讨论版里别人的问答,才搞明白题意,真是汗. 其实题目等价于给n个点,这n个点均匀分布在一个圆上(知道圆半径),点与点之间的路程(弧长)已知,点是有权值的,已知,点与 ...
- Codeforces Round #417 (Div. 2) B. Sagheer, the Hausmeister —— DP
题目链接:http://codeforces.com/problemset/problem/812/B B. Sagheer, the Hausmeister time limit per test ...
- jmeter使用笔记——脚本录制,JMeter使用plugins插件进行服务器性能监控
脚本录制: 1.badboy录制 2.代理服务器录制 ①工作台添加HTTP代理服务器 ②设置目标控制器,分组,排除模式,包含模式(使用正则表达式筛选) ③设置浏览器,手动设置代理服务器,localho ...
- VS2010关于调用ffmpeg借口出错
win7 下开发视频服务器,用到ffmpeg,debug版本运行正常,切换到release时,出现"0x00905a4d 处未处理的异常: 0xC0000005: 读取位置 0x00905a ...
- servlet从jsp到jsp实现例子
已登录页面为例子: 1.login.jsp <%@ page language="java" contentType="text/html; charset=UTF ...
- hdu-5768 Lucky7(容斥定理+中国剩余定理)
题目链接: Lucky7 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Pr ...