前言

同读写格式化数据的>>,<<操作符不同,

  • 使用Stream成员函数读取数据时,不跳过起始空格。
  • 处理异常不同:使用成员函数,如果在读取期间,发生异常,不论源自某个被调用函数(比如在getline函数内部调用的某函数抛出异常),还是某个标志位被设立,badbit标志均会被设立。(注:成员函数内部实现中应该有一个捕捉异常的代码,在catch里面再做进一步的操作,如设立状态位badbit

输入用的成员函数

常用函数

成员函数 读取,直到… 字符数 添加结束符号’\0’ 返回值
get( s, num) 不包含new line或EOF 最多num-1 istream
get( s, num, t) 不包含t或EOF 最多num-1 istream
getline( s, num ) 包含new line或EOF 最多num-1 istream
getline( s, num, t) 包含t或EOF 最多num-1 istream
read( s, num ) EOF num istream
readsome( s, num ) EOF 最多num count

针对以上表格的补充说明:

  • get( s, num, t )getline(s, num, t )中的t表示自定义的终止符
  • 以下表格中函数说遇到EOF会停止读取,但用cin做测试时,如下:

    char szBuff[8] = { 0 };
    while( cin.get( szBuff, sizeof(szBuff) ) )
    {cout << szBuff << endl;
    }

    然后输入:abc(Ctrl + Z)(Enter) ,但是并没有输出内容,

    原因:在wondow下Ctrl+Z必须是每次输入流的第一个,否则会被当成无意义的字符,参考https://stackoverflow.com/questions/25766486/c-issue-with-cin-and-ctrl-z

  • get(s, num)get(s, num, t)读取时遇到结束符,停止读取,并且不读取结束符(new line 或EOF或t),即结束符会遗留在流中,下面做个测试

    char szBuff[8] = { 0 };
    while( cin.get( szBuff, sizeof(szBuff), 'e' ) )
    {cout << "current read string: " << szBuff << endl;//打印此时流中的第一个字符//peek成员函数返回下一个被读取的字符,但不从流中取出cout << "next read character is '" << char(cin.peek()) << "'" << endl;//此处忽略两个无用字符,即'e''\n',使下一次正常读取cin.ignore( 2 );
    }

  • getline(s, num)getline(s,num, t),读取时遇到结束符,停止读取,并且会读取结束符(new line 或EOF或t),但这结束符不储存于s中,直接丢弃,下面也做个测试:

    char szBuff[8] = { 0 };
    while( cin.getline( szBuff, sizeof(szBuff), 'e' ) )
    {cout << "current read string: " << szBuff << endl;//打印此时流中的第一个字符//peek成员函数返回下一个被读取的字符,但不从流中取出//其中'\n'的ASCII为10,字符'e'被读取并丢弃了cout << "next read character is " << cin.peek() << endl;//此处忽略1个无用字符,即'\n',使下一次正常读取cin.ignore( 1 );
    }

  • read函数在正常读取的情况下,会一直读取num个字符,如果流中无num个字符,则会阻塞等待,直到读够num个,才返回;readsom则不会阻塞等待,从当前流中读取<=num个字符,即刻返回,若一个字符都没有,就读取失败。注意:这两个函数不在字符串后面加结束符号’\0’。

其它函数

  • streamsize istream::gcount 返回上次非格式化读取的字符个数
  • istream& istream::ignore函数,从流中读取字符并丢弃
  • int istream::peek()返回流中下一个将被读取的字符
  • istream& istream::unget()istream& istream::putback把上一次读取的字符放回流
  • tellgseekg函数主要和文件连用,之后再讲述

输出用的成员函数

  • ostream& ostream::put( char c ): 写入一个字符
  • ostream& ostream::write( const char* str, streamsize count):写入count个字符
  • ostream& ostream::flush():把所有缓冲区数据强制写入其所属设备

建议

使用Stream的成员函数,同格式化函数(operator<<、operator>>)一样,在其内部会产生一个sentry(岗哨)对象(此对象的构造函数负责在使用流操作前进行预处理,析构函数负责对应后的处理),会带来一些开销。而直接运用stream buffer或stream buffer相应的迭代器(如ostreambuf_iterator)进行“非格式 化流操作”,性能会更高。(注:stream buffer之后章节会讲到)

C++标准库笔记:13.5 标准I/O函数相关推荐

  1. Python标准库笔记(9) — functools模块

    functools 作用于函数的函数 functools 模块提供用于调整或扩展函数和其他可调用对象的工具,而无需完全重写它们. 装饰器 partial 类是 functools 模块提供的主要工具, ...

  2. python标准库math用来计算平方根的函数_《Python程序设计方案》题库

    < Python 程序设计>题库 一.填空题 第一章 基础知识 1 . Python 安装扩展库常用的是 _______ 工具.( pip ) 2 . Python 标准库 math 中用 ...

  3. python标准库math用来计算平方根的函数_《Python程序设计》试试题题库

    WORD 格式可编辑 < Python 程序设计>题库 一.填空题 第一章 基础知识 1 . Python 安装扩展库常用的是 _______ 工具.( pip ) 2 . Python ...

  4. python标准库math中用来计算平方根的函数_python考试复习题库

    内容来自用户:魔翼双飞237 一. 填空e68a843231313335323631343130323136353331333433646430题1. Python安装扩展库常用的是_工具.(pip) ...

  5. C标准库“圣经”:C标准库

    C标准库"圣经":C标准库 [作 者](美)P.J.Plauger [同作者作品] [作译者介绍]  [译 者] 卢红星;徐明亮;霍建同[同译者作品]  [丛 书 名] 图灵程序设 ...

  6. C++的标准库和C++的标准模板库(STL)

    https://www.cnblogs.com/jpfss/p/10025771.html C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标准头文件中定义.在C++开发 ...

  7. python语言的标准库有哪些,python标准库函数有哪些

    PyFlux库函数是什么? PyFlux是Python编程语言的开源时间序列库.PyFlux是Python中为处理时间序列问题而创建的开源库. 该库有一系列极好的时间序列模型,包括但不限于 ARIMA ...

  8. python标准库math中用来计算平方根的函数是_2020超星尔雅网课透过性别看世界完整满分见面课答案...

    壮医药线点灸之所以能治疗厌食症是因为其具有( )的功效. 智慧职教: 下列药物中,从肾脏排泄最少的是 [A1/A2型题]葡萄胎清宫术前备用物品中哪项不需要 设循环队列的存储空间为Q(1:m),初始状态 ...

  9. c语言的erase函数,C++ STL标准库中sort,erase,remove_if函数的使用

    本篇介绍C++ STL中常用的几个函数 1.std::sort 1.1.sort函数包含在头文件为#include的c++标准库中,调用标准库里的排序方法可以实现对数据的排序. 1.2.sort函数的 ...

  10. python基础课程_学习笔记13:标准库:有些收藏夹——sys

    标准库:有些收藏夹 sys sys这个模块可以让你访问和python解释器联系紧密的变量和函数. sys模块中一些重要的函数和变量 函数/变量 描写叙述 argv 命令行參数,包含脚本名称 exit( ...

最新文章

  1. RxSwift设置 UITextField文本订阅未响应
  2. C#教程01:关于C#
  3. 基于用例点来度量软件规模并管理进度 之一
  4. debug in ERP - four queue generated one by one
  5. 使用javamail进行邮件发送
  6. es6 ie不兼容 函数_ES6:什么是块级作用域?
  7. DR5白金版 for mac(PS一键磨皮插件Delicious Retouch)支持ps 2022
  8. 项目总结一:情感分类项目(emojify)
  9. mysql 递归查找父节点_MySQL递归查询父子节点
  10. 游戏建模赏析:《魔兽世界》伊瑟拉图鉴
  11. 数据挖掘作业FCM算法
  12. 面试官问你“有什么问题问我吗?”,你该如何回答? 1
  13. 王牌英雄怎么服务器维护了,王牌英雄steam版无法运行问题解决方法
  14. https://pypi.tuna.tsinghua.edu.cn/packages/97/ae/0b08f53498417914f2274cc3b5576d2b83179b0cbb209457d0f
  15. go微服务调用报错too many colons in address
  16. html中半圆怎么写,css怎么写半圆?
  17. linux异常(九):Linux虚拟机启动异常/打不开 位-000005.vmdk”或它所依赖的某个快照磁盘 | 做映射时提示:读取卷信息时出错 请选择其他磁盘文件
  18. 连接无线路由器显示windows找不到证书来登录无线网络
  19. Appium APP UI自动化测试框架介绍
  20. 纳兰容若与仓央嘉措的邂逅

热门文章

  1. layui富文本编辑器图片上传无法回显问题解决
  2. 孙正义的时间机器理论
  3. Android Git 拉取代码报错:error: cannot pull with rebase: Your index contains uncommitted changes.
  4. #HPDC 华为伙伴暨开发者大会2022随笔
  5. 飞桨领航团AI达人创造营第一课
  6. java保存图片到tomcat_Java上传图片到服务器路径获取系列之--图片保存到Tomcat的webapps目录下...
  7. linux第一块硬盘的第一个分区,Linux下硬盘分区基础
  8. 音视频集成工程企业能力等级证书认证介绍
  9. linux arp头文件,Linux下ARP头结构体的问题
  10. Xcode真机调试报错:The application could not be verified.