当前位置: 首页 > news >正文

上海公司名字查询天津关键词优化平台

上海公司名字查询,天津关键词优化平台,温州阿里巴巴网站建设,毕业设计代做网站靠谱么《C输入流和输出流》一节提到,cout 和 cerr、clog 的一个区别是,cout 允许被重定向,而 cerr 和 clog 都不支持。值得一提的是,cin 也允许被重定向。那么,什么是重定向呢?在默认情况下,cin 只能接…

《C++输入流和输出流》一节提到,cout 和 cerr、clog 的一个区别是,cout 允许被重定向,而 cerr 和 clog 都不支持。值得一提的是,cin 也允许被重定向。

那么,什么是重定向呢?在默认情况下,cin 只能接收从键盘输入的数据,cout 也只能将数据输出到屏幕上。但通过重定向,cin 可以将指定文件作为输入源,即接收文件中早已准备好的数据,同样 cout 可以将原本要输出到屏幕上的数据转而写到指定文件中。

C++ 中,实现重定向的常用方式有 3 种,本节将一一做详细讲解。

C++ freopen()函数实现重定向

freopen() 定义在头文件中,是 C 语言标准库中的函数,专门用于重定向输入流(包括 scanf()、gets() 等)和输出流(包括 printf()、puts() 等)。值得一提的是,该函数也可以对 C++ 中的 cin 和 cout 进行重定向。

举个例子:

#include //cin、cout

#include //string

#include //freopen

using namespace std;

int main()

{

string name, url;

//将标准输入流重定向到 in.txt 文件

freopen("in.txt", "r", stdin);

cin >> name >> url;

//将标准输出重定向到 out.txt文件

freopen("out.txt", "w", stdout);

cout << name << "\n" << url;

return 0;

}

执行此程序之前,我们需要找到当前程序文件所在的目录,并手动创建一个 in.txt 文件,其包含的内容如下:

C++

http://c.biancheng.net/cplus/

创建好 in.txt 文件之后,可以执行此程序,其执行结果为:

与此同时,in.txt 文件所在目录下会自动生成一个 out.txt 文件,其包含的内容和 in.txt 文件相同:

C++

http://c.biancheng.net/cplus/

显然,通过 2 次调用 freopen() 函数,分别对输入流和输出流重定向,使得 cin 不再接收由键盘输入的数据,而是直接从 in.txt 文件中获取数据;同样,cout 也不再将数据输出到屏幕上,而是写入到 out.txt 文件中。

C++ rdbuf()函数实现重定向

rdbuf() 函数定义在头文件中,专门用于实现 C++ 输入输出流的重定向。

值得一提的是,ios 作为 istream 和 ostream 类的基类,rdbuf() 函数也被继承,因此 cin 和 cout 可以直接调用该函数实现重定向。

rdbuf() 函数的语法格式有 2 种,分别为:

streambuf * rdbuf() const;

streambuf * rdbuf(streambuf * sb);

streambuf 是 C++ 标准库中用于表示缓冲区的类,该类的指针对象用于代指某个具体的流缓冲区。

其中,第一种语法格式仅是返回一个指向当前流缓冲区的指针;第二种语法格式用于将 sb 指向的缓冲区设置为当前流的新缓冲区,并返回一个指向旧缓冲区的对象。

举个例子:

#include

#include

using namespace std;

int main()

{

//打开 in.txt 文件,等待读取

ifstream fin("in.txt");

//打开 out.txt 文件,等待写入

ofstream fout("out.txt");

streambuf *oldcin;

streambuf *oldcout;

char a[100];

//用 rdbuf() 重新定向,返回旧输入流缓冲区指针

oldcin = cin.rdbuf(fin.rdbuf());

//从input.txt文件读入

cin >> a;

//用 rdbuf() 重新定向,返回旧输出流缓冲区指针

oldcout = cout.rdbuf(fout.rdbuf());

//写入 out.txt

cout << a << endl;

//还原标准输入输出流

cin.rdbuf(oldcin); // 恢复键盘输入

cout.rdbuf(oldcout); //恢复屏幕输出

//打开的文件,最终需要手动关闭

fin.close();

fout.close();

return 0;

}

程序中涉及到的文件操作,后续章节会做详细讲解,读者只需领悟 rdbuf() 函数的用法即可。

仍以前面创建好的 in.txt 文件为例,执行此程序后,控制台不会输出任何数据,而是会在该项目的目录下生成一个 out.txt 文件,其中就存有该程序的执行结果:

C++

http://c.biancheng.net/cplus/

C++通过控制台实现重定向

以上 2 种方法,都是从代码层面实现输入输出流的重定向。除此之外,我们还可以通过控制台实现输入输出的重定向。

举个例子,假设有如下代码(文件名为 demo.cpp):

#include

#include

using namespace std;

int main()

{

string name, url;

cin >> name >> url;

cout << name << '\n' << url;

return 0;

}

通过编译、链接后,会生成一个 demo.exe 可执行文件,该执行文件可以双击执行,也可以在控制台上执行。例如,打开控制台(Windows 系统下指的是 CMD命令行窗口,Linux 系统下指的是 Shell 终端),并输入如下指令:

C:\Users\mengma>D:\demo.exe

C++ http://c.biancheng.net/cplus/

C++

http://c.biancheng.net/cplus/

可以看到,demo.ext 成功被执行,但程序中的 cin 和 cout 并没有被重定向,因此这里仍需要我们手动输入测试数据。

在此基础上,继续在控制台执行如下指令:

C:\Users\mengma>D:\demo.exe out.txt

需要注意的是,执行此命令前,需保证 C:\Users\mengma 目录下有 in.txt 文件。

执行后会发现,控制台没有任何输出。这是因为,我们使用了"out.txt"对程序中的 cout 输出流做了重定向。

如果此时读者进入 C:\Users\mengma 目录就会发现,当前目录生成了一个 out.txt 文件,其中就存储了 demo.ext 的执行结果。

在控制台中使用 > 或者 < 实现重定向的方式,DOS、windows、Linux 以及 UNIX 都能自动识别。

http://www.lbrq.cn/news/2488069.html

相关文章:

  • 万网市值关键词优化平台有哪些
  • 手机网站建设维护协议seo网站推广主要目的不包括
  • Wordpress host宁波seo关键词优化制作
  • 九江市做网站的公司seo结算系统
  • 新开传奇网站超变活动推广软文
  • 深圳网站建设营销策划企业新闻营销
  • 佛山大型网站建设百度网络营销中心
  • 余姚企业网站建设全国最大的关键词挖掘
  • 做网站需要硬件设施附近成人电脑培训班
  • 长沙企业网站建设哪家好广州各区最新动态
  • 网上书店网站建设规划书推广文案怎么写吸引人
  • 如何做属于自己的网站怎么把抖音关键词做上去
  • 教育网站建设网站seo排名专业公司
  • 济南做网站的公司哪家好网上商城网站开发
  • 网站定制开发是什么百度网盘免费下载
  • 网站建设如何选择域名个人网站注册平台
  • 西安有那些做网站的公司好宁德市属于哪个省
  • 专做婚宴用酒是网站seo技巧seo排名优化
  • 旅游房地产网站建设百度关键词推广条件
  • php网站开发思路品牌公关
  • 深圳vi设计公司哪家好seo关键词排名优化系统
  • 关于校园网站建设的通知网站优化招商
  • 做网站怎么样才能赚到钱seo优化便宜
  • 官方网站内容更新需要怎么做淘宝怎么推广自己的产品
  • 苏州的网站建设公司山东企业网站建设
  • 互联网创业项目名称灯塔网站seo
  • 镇江做网站保定网站建设报价
  • 可以做网站的编程有什么百度一下一下你就知道
  • 中国建设银行积分商城网站网络营销的主要方法
  • 湖南网站建设kaodezhu广告关键词有哪些类型
  • CentOS 9 配置国内 YUM 源
  • 中级全栈工程师笔试题
  • 嵌入式软件面试八股文
  • 用 Flask 打造宠物店线上平台:从 0 到 1 的全栈开发实践
  • 实战演练1:实战演练之命名实体识别
  • 用哈希表封装Myunordered_map和Myunordered_set