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风格字符串操作函数:
- char *strcpy
- char *strcmp
- char *strcat 字符串追加函数
- char *strtok( ) 字符串分割函数
- strlen( )
判断:是否是空格的函数
isspace( )