I/O
- 数据的输入输出(input/output简写为I/O)
- 对标准输入设备和标准输出设备的输入输出简称为标准I/O
- 堆在外存磁盘上的文件的输入输出简称为文件I/O
- 对内存中指定的字符串存储空间的输入输出简称为串I/O
流
- 数据输入输出的过程,可以形象的看成流
- 从流中获取数据的操作称为“提取”(输入)操作
- 向流中添加数据的操作称为“插入”(输出)操作
- 标准输入输出流
- 文件流
- 字符串流
流类库继承体系
- 流库具有两个平行的基类:streambuf和ios类,所有流类均以两者之一作为基类
- streambuf类提供对缓冲区的低级操作:设置缓冲区、对缓冲区指针操作、向缓冲区存/取字符
- ios_base、ios类记录流状态,支持对streambuf的缓冲区输入/输出的格式化或非格式化转换
- streambuf:使用串保存字符序列。扩展streambuf在缓冲区提取和插入的管理
- filebuf:使用文件保存字符串序列。包括打开文件、读/写、查找字符
四个输入输出对象
- C++为用户进行标准I/O操作定义了四个类对象:cin、cout、cerr和clog
- cin为istream流类的对象,代表标准输入设备键盘,后三个为ostream流类的对象
- cout代表标准输出设备显示器
- cerr和clog含义相同,均代表错误信息输出设备显示器
ostream流的操作
- operator<<
- 可以连续输出,因为<<返回的还是cout
- put()
- 输出单个字符
- 返回一个ostream对象的引用
cout.put('H').put('i')
- write()
- write(buf, len)
- write()返回一个ostream对象的引用
- cout.write(buf, len) //char buf[len]
istream流的操作
- operator>>操作
- get()
- 读取单个字符
- 返回一个整数(输入字符的ASCall码值) - getline()
- read()
- peek()
- putback()
get()
1. 读取单个字符
2. 返回一个整数(输入字符的ASCall码值)
get(cahr&)
1. 返回单个字符
2. 返回一个istream对象的引用
#include <iostream>
using namespace std;
int main(void)
{
char ch1, ch2;
cin.get(ch1).get(ch2);
cout << ch1 <<" "<<ch2<< endl;
return 0;
}
getline()
1. 读取一行(遇到回车键)
2. 返回istream对象的引用
3. getline()与>>的区别:
char string1[256];
cin.getline(string1, 256); //get a whole line
cin>>string1; //stop at the first blank space
#include <iostream>
using namespace std;
int main(void)
{
char buf[10] = { 0 };
cin.getline(buf, 9);
cout << buf << endl;
return 0;
}
read()
1. read(buf, len)
2. 返回一个istream对象的引用
3. 对空白字符照读不误
4. 必须读满len个字符才停止
#include <iostream>
using namespace std;
int main(void)
{
char buf[10] = { 0 };
cin.read(buf, 5);
cout << buf << endl;
return 0;
}
peek()
查看而不读取
putback()
将一个字符添加到流
#include <iostream>
using namespace std;
int main(void)
{
char c[10],c2,c3;
c2 = cin.get();
c3 = cin.get();
cin.putback(c2);
cin.getline(c, 9);
cout << c << endl;
return 0;
}