C++标准输入流
开发工具与关键技术:C++、VisualStudio作者:何任贤撰写时间:07月06日
C++程序中,对数据的输出输入是以字节流实现的, 应用程序对字节序列作出各种数据解释, I/O系统的任务就是在内存和外部设备之间稳定可靠地传输数据和解释数据。
流类对象可以建立和删除,可以从流中获取数据和向流添加数据,c++的输出流都是以字节形式进行数据传递。
c++中我们常用的是标准流,标准流是C++预定义的对象,提供内存与外部设备进行数据交互功能,流的操作是流类的公有成员函数。
我们在操作标准流的时候一般是用到iostream.h头文件,它包含所有的标准输入流操作。
流库(stream library)是用继承方法建立的输入输出类库, 流库具有两个平行的基类:streambuf 和 ios 类,所有流类均以两者之一作为基类,意思是c++中所有输出输入流的基类都是streambuf 和 ios 类,而标准流的基类就是ios类。
标准输入流关键字是cin是istream 类的对象,而istream 类则是在iostream.h头文件中所以我们在使用标准流是需要包含iostream.h头文件,一般情况下连接键盘,cin重定向方法:把程序编译成 .exe文件,在 DOS 状态下以命令参数形式对标准流重定向。
istream类的公有成员函数,即输入流操作:
函数 功能
read() 无格式输入指定字节数
get() 从流中提取字符,包括空格
getline() 从流中提取一行字符
ignore() 提取并丢弃流中指定字符
peek() 返回流中下一个字符,但不从流中删除
gcount() 统计最后输入的字符个数
而输入流的标志字,即标志常量有:
状态标志 值 含义
skipws 0X0001 跳过输入中的空白
dec 0X0010 转换基制为十进制
oct 0X0020 转换基制为八进制
hex 0X0040 转换基制为十六进制
下面是对上面的一些函数和标志字的演示:
#include
using namespace std;
void main()
{
char b;
char c[15] = {0};
int d = 0;
d = cin.peek();
cout << “peek函数:” << d << “\n”;
cin.get(b);
cout << “get函数:” << b << “\n”;
cin.ignore(5);
d = cin.peek();
cout << “peek函数:” << d << “\n”;
cin >> c;
cout << “ignore函数:” << c << “\n”;
d = cin.gcount();
cout << “gcount函数:” << d << “\n”;
cin.setf(ios::oct, ios::basefield); cin >> d;
cout << “oct标志字” << d << “\n”;
cin.setf(ios::hex, ios::basefield); cin >> d;
cout << “hex标志字” << d << “\n”;
}