C++自我学习.6

C++自我学习.6

输入输出流深入剖析

1.iostream库

<iostream>     I/O的基础服务

<iomanip>      格式化I/O

<fstream>      文件处理

add:

typedef

数据类型提供别名      typedef+类型+别名

2.I/O类和对象

类模板

运算符重载

<<左移运算符重载用于流输出,流插入运算符

>>右移运算符重载用于流输入,流提取运算符

标准流对象

cin     标准输入流     istream对象

cout    标准输出流     ostream对象

cerr    标准错误流     ostream对象

clog    标准错误流     ostream对象

输出流

cout<<

cout.put( )   输出一个字符

cout.write(a,n)

例:

cout.put(65)   输出 A  

add:

自定义输出流操纵符

本质函数调用

输入流

cin>>       从输入流提取数据遇到空格就终止

成员函数:

1.cin.eof( )  判断是否读到文件结尾,返回true/false    cout<<cin.eof( )

2.c=cin.get( )  从输入流中提取一个字符,存储在其引用的字符参数内,返回值就是读入的子遇到输入流的文件结符,就返回EOF       

和C中的getchar()没什么区别                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 

cin.get(c)  读取一个字符赋值给c字符,读取成功,返回true,读取到文件结束符,返回false

例:

循环判断条件

while(cin.get(c))

3.cin.get( a , n , \n )  cin.get(*ptr , n , \n )

读取成功则返回true,失败(遇到EOF标志)返回false同样可用于循环,默认终止字符(分隔符) \n,字符串末尾会添加标记空字符‘\0’

注意:

遇到分隔符,不会将分隔符输出,保留在输入流(缓冲区)中,除非将其移出(cin.ignore()),否则会留到到下一次输出

5.cin.getline(a , n )   接收一个字符串,所以有‘\0’

注意:

遇到分隔符,不会将分隔符输出,会将其移除

getline的返回值就是cin状态,cin状态会隐性调用!cin.fail转化为布尔值

bu:

getline( cin,str)属于<string>的函数,str必须是string类型

终极

每个输入操作后,都会返回一个引用,如果引用被用作判断条件,将会隐性调用流重载函数void*强制转换运算符函数,根据最后输入的成功与失败将引用转化为非空指针还是空指针值,非true,空false

所以当试图越过流的末尾进行读取操作时,流重载void*强制转化运算符返回一个空指针flase,表示读到文件末尾

技巧:连续读存

char a[20];          i like c++  /  i study c++  /  i am happy

cin>>a;

cin.getline(a,20,/)

cin.getline(a,20,/)

在输入流中有一个字符指针指向当前应访问的字符。

6.cin.ignore(a,ch)       读取并丢弃一定数量的元素,默认1个,第二个参数默认分隔符EOF

7.cin.peek( )           返回输入流中下1个字符,但不将它从流中去除

8.cin.putback( )         将先前读取的1个字符再放回缓存区中

9.cin.read(a,20)        和getline类似

10.cin.gcount( )        返回上一次读入操作读取的字符数

add:

EOF   int型  -1

缓冲区  buffer

注意:回车键的辨析 \n

char a[20];

cin>>a;

cin.get();

cin.get();

思考:

hello+\n

cin读完hello

get读取\n

第二个get才会继续输入

cin的错误处理机制

流状态(stream state)

cin和cout对象中包含一个描述流状态的数据成员。

由3个元素组成:eofbit、badbit、failbit,其中每个元素都是一位,可以是1或0

1.遇到文件尾                      输入流的eofbit被置位1,failbit也被置位1

2.格式错误,缓冲区未读取完        ailbit被置位1,不会再继续读入任何字符  

3.数据丢失                        badbit被置位1

4.如果eofbit,failbit,badbit都没有被置位,goodbit就会被置位1

检测流的错误状态

cin.eof( )

cin.fail( )

cin.bad( )

cin.good( )

重置流的状态

cin.clear( )

返回流的状态

cin.rstate( )

例:

缓冲区未读取完造成输入异常

重置cin.clear( ) 或 清空cin.ignore( )

可继续读取

各种返回字符串长度的函数

.size(  )

.length(  )   

.sizeof(  )   获取的是占用的内存大小+空子字符的占用

.strlen       用在C风格的字符串—字符数组,返回到第一个 \0前的字符个数

                   

C风格字符串操作函数:

  1. char *strcpy
  2. char *strcmp
  3. char *strcat    字符串追加函数
  4. char *strtok( )  字符串分割函数
  5. strlen( )  

判断:是否是空格的函数

isspace(  )

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成也萧何,败也萧何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值