C++输入流
输出流基本概念
输出流定义在头文件中。大部分程序都会包含头文件,这个头文件又包含了输入流和输出流头文件。头文件还声明了标准控制台输出流cout。
使用输出流的最简单的方法是使用<<运算符。通过<<可以输出C++的基本类型,例如int、指针、double和字符串。此外,C++的string类也兼容<<,C风格的字符串也能正常输出。
int i = 7;
cout << i << endl;
char ch = 'a';
cout << ch << endl;
string str = "hello world !";
cout << str << endl;
C++流可以正确地解析C风格的转义字符,例如包含\n的字符串,也可以使用std::endl开始一个新行。\n和endl的区别是,\n仅仅开始一个新行,而endl还会刷新缓存区。使用endl要小心,因为过多的刷新缓存区会降低性能。
输出流的方法
put()和write()
put()和write()是原始的输出方法。put()接受单个字符,write()接受一个字符数组。
flush()
向流写入数据时,流不一定会将数据立即写入目标。大部分输出流都会进行缓存,也就是积累数据,而不是立即将得到的数据写出去。当满足一下条件之一是,流进行刷新操作(flush):
- 达到某个标记时,例如endl标记
- 流离开作用域被析构时。
- 要求从对应的输入流输入数据时(即要求从cin输入时,cout会刷新)。
- 流缓存满时。
显示要求刷新缓存的方法是调用flush()方法。
cout << "abc";
cout.flush(); // abc is written to the console.
cout << "def";
cout.endl; // def is written to the console.
并不是所有的输出流都会缓存,例如cerr流就不会缓存
处理输出错误
- 当一个流处于正常的可用状态时,称这个流是好的。调用good()方法可以判断这个流当前是否处于正常状态。
- good()可以获得流的基本验证信息,但是不能提供流不可用的原因。bad()方法提供稍多的信息。如果bad()返回true,意味着发生了致命的错误。另一个方法fail()在最近一次操作失败时返回true,但是没有说明下一次操作是否也会失败。
cout.flush();
if(cout.fail()){
cerr << "Unable to flush to standard out. " << endl;
}
- 通过clear()方法可以重置流的错误状态
输出操作算子
流的一项独特性是,放入数据滑槽的内容并非仅限于数据,C++流还能识别操作算子,操作算子是能够修改流行为的对象,而不是流能够操作的数据。大部分的操作算子定义在和标准头文件中。
- boolalpha和noboolalpha:要求流将bool值输出为true和false或1和0.
- hex、oct和dec:分别十六进制、八进制和十进制输出数字。
- setprecision:设置输出小数时小数位数。这是一个参数化的操作算子(也就是说这个操作算子接受一个参数)。
- setw:设置输出数据的字段宽度。这是一个参数化操作算子。
- setfill:当数字宽度小数指定宽度时,设置用于填充的字符。
- showpoint和noshowpoint:对于不带小数部分的浮点数,强制要求显示或是不显示小数点。
- put_money:向流写入一个格式化的货币。
- put_time:向流写入一个格式化的时间值。
- quoted:把给定的字符串封装在引号中,并转义嵌入引号。这个是一个参数化的操作算子。
// boolean values
bool myBool = true;
cout << "This is the default: " << myBool << endl;
cout << "This should be true: " << boolalpha << myBool << endl;
cout << "This should be 1: " << noboolalpha << myBool << endl;
// Money amount
cout << "This should be a money amount of 120000, formatted according to your location: "<< put_money("120000") << endl;
// Date and time
time_t t_t = time(nullptr); // Get current system time.
tm* t = localtime(&t_t); // Convert to local time.
cout << "This should be the current date and time formatted according to your location: " << put_time(t,"%c") << endl;
// C++14 : Quoted string
cout << "This should be \"Quoted string with \\\"embedded quotes\\\".\" :" << quoted("Quoted string with \" embedded quotes\".") << endl;
C++输入流的更多相关文章
- 输入流和字符串互转,InputStream2String,String2InputStream
输入流转字符串 public static String InputStream2String(InputStream in) { InputStreamReader reader = null; t ...
- 在.NET中使用管道将输出流转换为输入流
最近在写一段代码,将本地文件压缩加密后发送到服务器,发送到服务器的类用一个输入流作为参数获取要上传的数据,而压缩类和加密类都是输出流. 如何将输出流转换为输入流,最直观的方法是缓存输出流的全部内容到内 ...
- 详解PHP输入流php://input
在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组.所以,这里主要探讨php输入流php://input 对一php://inpu ...
- java读取输入流
java读取输入流两种 private static byte[] readStream(InputStream in){ if(in==null){ return null; } byte[] bu ...
- PHP 输入流 php://input
在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组.所以,这里主要探讨php输入流php://input 对一php://in ...
- Struts2文件下载找不到输入流异常
先发异常 Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack. Check ...
- 字符输入流Reader简要概括
字符输入流Reader组成结构 本篇将对JAVA I/O流中的字符输入流Reader做个简单的概括: 总得来说,每个字符输入流类都有一个对应的用途,如下: 字符流基类:Reader 字节流转字符流:I ...
- [转]java 输出流转输入流
ByteArrayOutputStream.toByteArray ByteArrayInputStream StringWriter.toString StringReader 字符流和二进制流是j ...
- java io系列14之 DataInputStream(数据输入流)的认知、源码和示例
本章介绍DataInputStream.我们先对DataInputStream有个大致认识,然后再深入学习它的源码,最后通过示例加深对它的了解. 转载请注明出处:http://www.cnblogs. ...
- 文件输入流 FileInputStream类 文件输出流FileOutputStream ---转载
转载自---http://blog.csdn.net/hguisu/article/details/7418161 111:文件输入流: FileInputStream可以使用read()方法一次读入 ...
随机推荐
- (转载) 百度地图工具类封装(包括定位,附近、城市、范围poi检索,反地理编码)
目录视图 摘要视图 订阅 赠书 | 异步2周年,技术图书免费选 程序员8月书讯 项目管理+代码托管+文档协作,开发更流畅 百度地图工具类封装(包括定位,附近.城市.范围poi检索, ...
- 【BZOJ4071】【APIO2015】巴邻旁之桥
题意: Description 一条东西走向的穆西河将巴邻旁市一分为二,分割成了区域 A 和区域 B. 每一块区域沿着河岸都建了恰好 1000000001 栋的建筑,每条岸边的建筑都从 0 编号到 1 ...
- UVA-1347 Tour 动态规划 难以确定的状态
题目链接:https://cn.vjudge.net/problem/UVA-1347 题意 给出按x坐标排序的几个点. 欲从最左边不回头的走到最右边,然后再返回最左边. 每个点都要被访问,且只能经过 ...
- thttpd 在S3C6410的移植-web服务程序的应用
1. 在VMWare 虚拟机上将arm-linux-gcc 4.3.1配置好:2. 下载thttpd软件包并解压:3. 在thttpd根目录下运行: ./configure:4. ...
- java后台生成图片二维码
controller: /** * 获取登录的验证码 * @param request * @param response */ public void getLoginCode(HttpSessio ...
- 紫书 例题8-12 UVa 12627 (找规律 + 递归)
紫书上有很明显的笔误, 公式写错了.g(k, i)的那个公式应该加上c(k-1)而不是c(k).如果加上c(k-1)那就是这一次 所有的红气球的数目, 肯定大于最下面i行的红气球数 我用的是f的公式, ...
- 紫书 例题8-10 UVa 714 (二分答案)
这道题让最大值最小, 显然是二分答案 当题目求的是最大值最小, 最小值最大, 这个时候就要想到二分答案 为什么可以二分答案呢, 因为这个时候解是单调性的, 如果简单粗暴一点 就全部枚举一遍, 验证答案 ...
- 【BZOJ 1293】[SCOI2009]生日礼物
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然的滑动窗口题. (尺取法 如果l..i这一段已经有k种珍珠了. 那么就尝试把l++; (即把l这个影响尝试去掉一下 如果不足k种 ...
- iOS:UISplitViewController的创建
UISplitViewController是iPad特有的系统方法,主要效果就是呈现iPad的经典切割界面 代码创建实例: - (BOOL)application:(UIApplication *)a ...
- spring揭秘 读书笔记 二 BeanFactory的对象注冊与依赖绑定
本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,并且IoC Service Pr ...