今天学习C++,发现C++中的输出流除了常用的cout,还有cerr和clog两种输出流对象,由于之前没有遇到过,所以特地查了一下用法,记录一下。

1.      cin、cout、cerr、clog的用法区别

经典教材《C++Primer》第五版中解释到:标准库定义了 4 个 IO 对象。处理输入时使用命名为 cin的 istream 类型对象。这个对象也称为标准输入。处理输出时使用命名为 cout的 ostream 类型对象,这个对象也称为标准输出。标准库还定义了另外两个ostream 对象,分别命名为 cerr 和 clog。cerr 对象又叫作标准错误,通常用来输出警告和错误信息给程序的使用者。而 clog 对象用于产生程序执行的一般信息。一般情况下,系统将这些对象与执行程序的窗口联系起来。这样,当我们从cin 读入时,数据从执行程序的窗口读入,当写到 cin、cerr 或 clog 时,输出写至同一窗口。运行程序时,大部分操作系统都提供了重定向输入或输出流的方法。利用重定向可以将这些流与所选择的文件联系起来。

综合个人所查资料总结一下:

cin通过重载移位操作符>>实现数据流的输入;

cout、cerr、clog通重载移位操作符<<实现数据流输出,其中cout为标准输出流,在内存中开辟有缓存区,当缓存区满或者插入换行符endl时输出缓冲区中数据流到显示器;

cerr、clog均为标准错误流输出,不同的地方在于cerr输出不经过缓冲区,产生之后立即输出,故用于输出即时性的警告和错误消息,而clog则会首先输出到缓冲区,因此用于输出程序执行时产生的一般信息。

2.      cin、cout、cerr、clog在VS2012环境下的重定向

在调试程序时,经常会需要输入大量数据或者收集输出的数据信息,在这种情况下,可以采用重定向将输入输出流与特定文件联系起来,方便快捷,可以节省大量的时间精力,接下来演示如何在vs2012环境下实现四种io流的重定向。

对于cin的 重定向,首先应将需输入数据整理到目标文件,例如记为data.txt,然后将该文件放在解决方案的源码路径下,点击项目->属性,或者直接Alt+F7,打开对话框后找到左侧调试二级菜单,选择命令参数,键入"<data.txt"

之后点击确定,运行程序即可。对于cout的重定向,则是在命令参数中键入">target.txt",则会在源码路径下生成target.txt存放cout的输出。如果想要同时实现cerr及clog的重定向,则是需要在命令行中键入“>target.txt 2>&1”,则会在target.txt中同时存放cout、cerr和clog的输出信息。

cin、cout、cerr、clog用法区别及其在VS环境下的重定向相关推荐

  1. cout/cerr/clog的区别

    cout/cerr/clog都是C++提供的标准输出流,那这三个到底有什么区别? cout: 标准输出流,一般缓冲区满或者程序结束才刷新缓冲区 cerr: 标准输出错误,输出一条语句就会刷新一次缓冲区 ...

  2. cin,cerr,clog,cout

    iostream库:包含两个基础类型istream和ostream. 标准库定义了4个IO对象: 1. cin,标准输入,istream类型对象. 2. cout,标准输出,ostream类型对象. ...

  3. c语言cin cout,C++学习之:cout和cin用法总结

    cout cout 用于在屏幕上显示消息,应该是 console output 的简写.它是 C++ 中 ostream 对象,该类被封装在 库中,该库定义的名称都放在命名空间 std 中,所以 co ...

  4. C++基础::cin/cout

    cin/cout 的本质是流,cin 是输入流(istream),cout 是输出流(ostream). 进制: 默认十进制输出:cout << dec << 100 < ...

  5. cin、cin.get()、cin.getline()、getline()的区别

    测试平台g++ 5.4.0和VS2015社区版. 输入原理简述: 程序的输入都建有一个缓冲区,即输入缓冲区.每次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输 ...

  6. c语言中 char怎样用,C语言中char*和char[]用法区别分析

    C语言中char*和char[]用法区别分析 本文实例分析了C语言中char* 和 char []的区别.分享给大家供大家参考之用.具体分析如下: 一般来说,很多人会觉得这两个定义效果一样,其实差别很 ...

  7. c语言getline作用,C++ cin.getline及getline()用法详解

    下面先看下C++ cin.getline用法,具体内容如下所示: 使用 C++ 字符数组与使用 string 对象还有另一种不同的方式,就是在处理它们时必须使用不同的函数集.例如,要读取一行输入,必须 ...

  8. jquery中this与$(this)的用法区别.

    2019独角兽企业重金招聘Python工程师标准>>> jquery中this与$(this)的用法区别.先看以下代码: $("#textbox").hover( ...

  9. Java中PreparedStatement和Statement的用法区别

    Java中PreparedStatement和Statement的用法区别 (2012-08-01 11:06:44) 转载▼ 标签: 杂谈   1. PreparedStatement接口继承Sta ...

最新文章

  1. android 技能标签功能_android开发工程师必备技能
  2. 电感是怎么储存能量的
  3. java中用字节流读取文本时中文乱码
  4. lamda获取参数集合去空_JAVA集合框架知识
  5. java中序列化之子类继承父类序列化
  6. Teamcenter(Enterprise 2007) Admin 手法之 -- 移除relation
  7. 说一说javascript跨域和jsonp
  8. 看大厂NLP的面试经验之后的一些思考总结
  9. asp静态设置html,ASP生成静态Html文件技术杂谈
  10. linkedin 第三方网站登录(JavaScript SDK)
  11. scratch转flash、exe教程
  12. 怎么做PPT 课件代做 驼峰设计
  13. 腾讯业务安全岗 IDP 谈话总结
  14. WIN10为什么手机连接电脑开启热点后,电脑不能上网?
  15. ape flac 音频截取_为什么选择FLAC音频
  16. 使用Blynk打造一款物联网产品
  17. Photoshop 入门教程「2」了解 Photoshop 工作区
  18. 猫眼CEO郑志昊:为什么说产品思维已“死”?
  19. 心系冬奥 翰墨传情 |当代书画名家为奥运加油书画推介展【冉春艳篇】
  20. JavaSE基础知识(十八)--Java多态之向上转型(多态初步)

热门文章

  1. Anaconda 安装及使用
  2. Kali无线渗透获取宿舍WiFi密码(WPA)
  3. js中push使用 (数组)
  4. 华为交换机关闭服务端口
  5. SP服务商Java短信平台的软件模型和实现(吴宏杰,赵雷,杨季文,苏州大学计算机科学和技术学院)...
  6. C语言编程中void什么意思,程序设计中遇到的void到底是什么意思
  7. matlab程序算天气,科学网-站点气温数据的积温计算(含Matlab程序实现)-朱永超的博文...
  8. 今日踩坑Maven:omitted for duplicate
  9. 深入分析: Vista后Windows 微软需要思考什么
  10. 【哈佛大学:计算生物学 生物信息学】学习记录(二)