C++输入输出重定向方法示例
重定向是什么
所谓重定向就是把某应用原来的操作对象改成别的。比如说,我这个程序原来是从键盘接收信息的,现在该从一个叫config.ini的文件中接收信息了;本来输出的信息都显示在屏幕上的,现在我不显示在屏幕上了,我要输出到result.txt文本中保存起来。
本文主要给大家介绍了关于C++输入输出重定向的相关内容,分享出来供大家参考学习价值,下面话不多说了,来一起看看详细的介绍吧
C++中流(stream)是一个对象,所以任何有流这种行为的对象也是流对象。
流主要分为三种类型:
- istream: 主要是从流中执行输入操作
- ostream:主要是从流中执行输出操作
- iostream:主要是从流中执行输入输出操作
每个流对象都关联一个流buffer,程序一般从buffer中读取数据,所以如果要重定向流,只需要把buffer对象指向另外一个流即可。
所有的流对象都关联了一个类成员数据streambuf,它就是stream的缓冲区(buffer)。C++读取输入输出的时候是从buffer中读取,而不是源数据流读取。
我们执行重定向操作使用ios::rdbuf()
方法。对于这个方法,如果不传参数,那么直接返回流对象的buffer指针。如果传递了某个流对象的buffer指针,那么将当前的流对象绑定到那个传递过来的流对象的buffer上。
例子:
stream_object.rdbuf(); //返回流对象buffer stream_object.rdbuf(streambuf * p); //绑定流对象buffer
实际操作:
// cout 重定向到文件 #include <fstream> #include <iostream> #include <string> using namespace std; int main() { fstream file; // 定义fstream对象 file.open("D:\cout.txt", ios::out); // 打开文件,并绑定到ios::out对象 string line; // 先获取cout、cin的buffer指针 streambuf *stream_buffer_cout = cout.rdbuf(); streambuf *stream_buffer_cin = cin.rdbuf(); // 获取文件的buffer指针 streambuf *stream_buffer_file = file.rdbuf(); // cout重定向到文件 cout.rdbuf(stream_buffer_file); cout << "This line written to file" << endl; // cout重定向到cout,即输出到屏幕 cout.rdbuf(stream_buffer_cout); cout << "This line is written to screen" << endl; file.close(); // 关闭文件 return 0; }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
c/c++输出重定向的方法
c: 复制代码 代码如下: #include<stdio.h>int main(int argc,char* argv[]){ char test[]="c语言输出重定向测试"; int i; if (freopen("F:\\杂文件\\test.txt", "w", stdout)==NULL) fprintf(stderr, "重定向错误!无法输出到文本\n"); for(
-
浅谈c++中的输入输出方法
cin: 当碰到空格或换行符'\n'时,输入结束: char a[10],b[10]; cout<<"Enter some input:\n"; cin>>a>>b; cout<<a<<b<<"End\n"; 输出结果为: Enter some input: 12 34 56 1234END cin.getline: 当碰到换行符'\n'或达到所能接受的最大字符数时,输入结束: char a[
-
C++输入输出注意事项总结
本文总结了C++输入输出的各种注意事项,对于C++初学者或C++程序员来说都有一定的借鉴参考价值.具体总结分析如下: 一.string类: 1.cin>>string时,遇到'\n'或者空格即停止,并且'\n'或空格仍留在输入里,即只读了一个单词或什么都没读,但string类自己处理好了空字符什么的.下一次再这样读的话会跳过换行和空格; 2.读一行到string里可用getline(cin,string),这个函数一直读直到遇到了'\n',注意这里getline()不是cin的类方法,cin表
-
C++实现将输入复制到输出的方法
本文实例讲述了C++实现将输入复制到输出的方法.分享给大家供大家参考.具体实现方法如下: 将输入复制到输出的程序, 并将其中的制表符替换为\t, 把回退符替换为\b, 把反斜杠替按为\\ #include <stdio.h> main() { int ch; ch=getchar(); while(ch != EOF){ if(ch == '\t'){ putchar('\\'); putchar('t'); } else if(ch == '\b'){ putchar('\\'); putc
-
详解C++中赋值和输入输出语句的用法
C++赋值语句讲解 C++的赋值语句具有其他高级语言的赋值语句的功能.但不同的是,C++中的赋值号"="是一个运算符,可以写成 a=b=c=d; 而在其他大多数语言中赋值号不是运算符,上面的写法是不合法的. 关于赋值表达式与赋值语句的概念.在C++中,赋值表达式可以包括在其他表达式之中,例如: if((a=b)>0) cout<<"a>0"<<endl; 按语法规定if后面的( )内是一个条件.现在在x的位置上换上一个赋值表达式&
-
C++中输入输出流及文件流操作总结
本文实例为大家分享了C++中输入输出流及文件流操作笔记,供大家参考,具体内容如下 1.流的控制 iomanip 在使用格式化I/O时应包含此头文件. stdiostream 用于混合使用C和C + +的I/O机制时,例如想将C程序转变为C++程序 2.类继承关系 ios是抽象基类,由它派生出istream类和ostream类, iostream类支持输入输出操作,iostream类是从istream类和ostream类通过多重继承而派生的类 类ifstream继承了
-
C++输入输出操作符重载的深入分析
操作符的重载有一些规则: 1. 重载操作符必须具有一个类类型或枚举类型操作数.这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义.如:int operator+(int, int), 不可以 2. 为类设计重载操作符的时候,必须选择是将操作符设置为类成员还是普通非成员函数.在某些情况下,程序没有选择,操作符必须是成员:在另外一些情况下,有些经验可以指导我们做出决定.下面是一些指导:a. 赋值(=),下标([]),调用(())和成员访问箭头(->)等操作符必须定义为成员,将这些
-
C++中基本的输入输出函数使用指南
在C语言中是用printf函数进行输出,用scanf函数进行输入的.C++保留了C语言的这一用法. scanf函数一般格式是: scanf(格式控制, 输出表列) printf函数的一般格式是 scanf(格式控制, 输出表列) scanf(格式控制, 输出表列) [例]用scanf和printf函数进行输入和输出. #include <iostream> using namespace std; int main( ) { int a; float b; char c; scanf(
-
C++输入输出重定向方法示例
重定向是什么 所谓重定向就是把某应用原来的操作对象改成别的.比如说,我这个程序原来是从键盘接收信息的,现在该从一个叫config.ini的文件中接收信息了:本来输出的信息都显示在屏幕上的,现在我不显示在屏幕上了,我要输出到result.txt文本中保存起来. 本文主要给大家介绍了关于C++输入输出重定向的相关内容,分享出来供大家参考学习价值,下面话不多说了,来一起看看详细的介绍吧 C++中流(stream)是一个对象,所以任何有流这种行为的对象也是流对象. 流主要分为三种类型: istream:
-
C语言进阶输入输出重定向与fopen函数使用示例详解
目录 正片开始 输入输出重定向 fopen函数 正片开始 大多数情况下,我们所熟知的输入输出都是标准I/O(标准输入输出),也就是我们在写代码时会直接从键盘读取,从屏幕输出.但是当我们涉及到数据统计或者多组未定义内容输入时,我们的程序就会出现一些小问题 int n = 0; while(scanf("%d",&n)==1) 按照常理来说,这里 scanf 的返回值是成功输入的数的个数,输入一但结束,scanf 函数就无法继续读取 n,返回0,我们测试一下,输入“1,2,3,4,
-
Linux输入输出重定向详细使用说明
1.Linux标准输入输出 Linux标准输入.输出设备主要是键盘和显示器,详细介绍如下表所示. Linux标准输入输出 设备 设备文件名 文件描述符 类型 符号表示 键盘 /dev/stdin 0(缺省是键盘,为0时是文件或者其他命令的输出) 标准输入 < << 显示器 /dev/stdout 1(缺省是屏幕,为1时是文件) 标准输出 > >> 显示器 /dev/stderr 2(缺省是屏幕,为2时是文件) 标准错误输出 2> 2>> 注:其中一个&
-
oracle中decode函数的使用方法示例
decode的几种用法 1:使用decode判断字符串是否一样 DECODE(value,if1,then1,if2,then2,if3,then3,...,else) 含义为 IF 条件=值1 THEN RETURN(value 1) ELSIF 条件=值2 THEN RETURN(value 2) ...... ELSIF 条件=值n THEN RETURN(value 3) ELSE RETURN(default) END IF sql测试 select empno,decode(empn
-
Oracle数据行拆分多行方法示例
工作和学习中常常会遇到一行要分割成多行数据的情况,在此整理一下做下对比. 单行拆分 如果表数据只有一行,则可以直接在原表上直接使用connect by+正则的方法,比如: select regexp_substr('444.555.666', '[^.]+', 1, level) col from dual connect by level <= regexp_count('444.555.666', '\.') + 1 输出结果: COL ---- 444 555 666 多行拆分 如果数据表
-
swift 3.0中实现字符串截取、比较的方法示例
前言 字符串处理一直都是程序开发中不可避免的,而字符串截取/替换操作更是频繁.swift3.0 中不能直接使用下标数字进行字符串解决,只能使用String.Index来做位置索引,要想实现截取功能首先得获取到String.Index; 下面话不多说了,来一起看看详细的介绍吧. 实例代码 下面两段代码获取开头可结尾,获取中间部分参数用Range<Index>即可: 获取结尾两个字符子串: let sessionId = "this is a test" let index =
-
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
这是一个示例: <html> <head> <script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.js"></script> <script type="text/javascript"> $(document).ready(function(){ $(".btn1").cl
-
vue不通过路由直接获取url中参数的方法示例
前言 众所周知vue中使用路由的方式设置url参数,但是这种方式必须要在路径中附带参数,而且这个参数是需要在vue的路由中提前设置好的. 相对来说,在某些情况下直接在url后面拼接?mid=100的方式传递参数更灵活,你不需要设置路由,只需要在url后拼接参数即可,但是这种方式就需要通过javascript获取并提取url中的参数,通过传统的方式直接在页面中获取是行不通的了,因为vue中是无法通过location.search()来获取url问号之后的内容的. 当然,这个问题也有解决方法,就是把
-
微信小程序实现实时圆形进度条的方法示例
前言 最近工作中为了做一个录制按钮,研究了下小程序的实时圆形进度条实现,下面这篇文章就来给大家详细的介绍了实现的方法示例,废话不多说,先来看看效果图吧. 效果图如下 初始状态 点击中间按钮开始绘制 绘制过程 绘制结束 实现思路 建立两个canvas标签,先绘制底层的浅灰色圆圈背景,再绘制上层的红色进度条. WXML代码 <view class="wrap"> <view class="circle-box"> <canvas class
-
Ionic + Angular.js实现图片轮播的方法示例
本文主要给大家介绍了关于Ionic + Angular实现图片轮播的相关资料,分享出来供大家参考学习,需要的朋友们下面来一起看看吧. 先来看看实现的效果图: 方法示例: template文件夹新建slider.html <ion-view view-title="图片轮播"> <ion-content class="padding" scroll="false"> <ion-slides class="sl
随机推荐
- 使用js写的一个简易的投票
- JavaScript使用原型和原型链实现对象继承的方法详解
- 详解在Spring Boot中使用Mysql和JPA
- js循环改变div颜色具体方法
- C#之CLR内存字符串常量池(string)
- 给ECShop添加最新评论
- PHP5权威编程阅读学习笔记 附电子书下载
- 两个备份数据库的shell脚本
- JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
- Ruby中检测Gem是否安装的方法
- js支持键盘控制的左右切换立体式图片轮播效果代码分享
- js交换排序 冒泡排序算法(Javascript版)
- JS文本框默认值处理详解
- IIS ADMIN不能启动,提示错误代码-2146893818的解决方法
- 模拟Mybatis的实现方法
- 学习二维动态数组指针做矩阵运算的方法
- Android判断服务是否运行及定位问题实例分析
- php实现根据字符串生成对应数组的方法
- 企商在线提供免费80MB/php空间
- C字符串操作函数实现方法小结