VC中C++的输入输出I/O 流函数
2012-12-23 03:53
483 查看
(1)什么是“流”?
C++中的“流”(stream)是一种抽象,它表示数据从源端流向目的端。
输入流(Input Stream)表示的是数据从输入设备(如键盘、磁盘等)流向内存,输出流(Output Stream)表示的是数据从内存流向输出设备(如屏幕、打印机、磁盘等)。输入输出流(I/O Stream)是输入流和输出流的合称。
“流”中的内容可以是任意形式的数据,例如:ASCII字符、二进制形式的数据、图形、图像、声音等信息。
(2)C++将输入输出流(简称I/O流)分成三种类型:
标准输入输出流:流向标准输入输出设备(即键盘、显示器)的数据;
文件输入输出流:流向外存磁盘文件的数据;
字符串输入输出流:对内存中指定的空间(通常用一个字符数组作为存储空间)进行输入输出操作,流向这里的数据。
我们只对标准输入输出流、文件输入输出流进行讨论,对字符串输入输出流不作介绍。
(3)输入输出的类、类库
流类:在C++中定义的实现I/O的类;
流库:多个流类及其类层次集合;
C++中的流类由两类平行基类ios和streambuf组成,所有流类都通过这两个基类派生出来。
ios类是所有ios类层次的基类,提供输入/输出所需要的公共操作。
(1)输出流对象
cout:输出基本类型数据时,不必考虑数据是什么类型,系统会自动判断,选择相应的重载函数;输出用户自己定义的类型数据时,要重载<<运算符(具体见第8讲内容);
cerr:是在屏幕上显示出错信息,与cout用法类似,不同的是只能在屏幕上,而不能在磁盘文件上输出错误信息;
clog:用法与cerr类似,不同点是它带有缓冲区。
(2)格式输出
1)用格式控制符控制输出
输出不同进制的数:dec(十进制)、hex(十六进制)、oct(八进制)
例:
int n=20;
cout<<"设置进制: "<<endl;
cout<<"十进制: "<<n<<endl;
cout<<"十六进制: "<<hex<<n<<endl;
cout<<"八进制: "<<oct<<n<<endl;
cout<<"十进制: "<<dec<<n<<endl;
设置域宽:setw(n), n小于实际宽度时,按实际宽度输出,它一次只控制一个数值输出。
例:
int m=1234;
cout<<"设置域宽: "<<endl;
cout<<setw(3)<<m<<endl;
cout<<setw(5)<<m<<endl;
cout<<setw(10)<<m<<endl;
设置填充字符:setfill(c),需要与setw(n)合用
例:
int m=1234;
cout<<"设置填充字符: "<<endl;
cout<<setfill(‘*’)<<setw(5)<<m<<endl;
cout<<setw(10)<<m<<endl;
设置对齐方式:setiosflags(ios::left)(左对齐)、setiosflags(ios::right)(右对齐)
int m=1234;
cout<<"设置对齐方式"<<endl;
cout<<setfill(' ');
cout<<setiosflags(ios::left)<<setw(10)<<m<<endl;
cout<<setiosflags(ios::right)<<setw(10)<<m<<endl;
强制显示小数点和尾0:setiosflags(ios::showpoint)
强制显示符号:setiosflags(ios::showpos)
double d1=10/5,d2=22.0/7;
cout<<"显示小数点、尾和数符: "<<endl;
cout<<d1<<endl;
cout<<setiosflags(ios::showpoint)<<d1<<endl;
cout<<setiosflags(ios::showpos)<<d2<<endl;
cout<<resetiosflags(ios::showpos);
设置浮点数的输出是以科学记数法还是定点数
setiosflags(ios::scientific)(科学记数法)
setiosflags(ios::fixed)(定点数)
double dd=123.4567;
cout<<setiosflags(ios::scientific)<<dd<<endl;
cout<<setiosflags(ios::fixed)<<dd<<endl;
设置精度(有效数字):setpreciion(n)自动四舍五入
double dd=123.4567;
cout<<setprecision(2)<<dd<<endl;
cout<<setprecision(3)<<dd<<endl;
cout<<setprecision(4)<<dd<<endl;
cout<<setprecision(5)<<dd<<endl;
输出十六进制数时控制英文字母的大小写:setiosflags(ios::uppercase)
int num=510;
cout<<"以大小写方式输出进制数: "<<endl;
cout<<"16进制数(默认:小写方式):"<<hex<<num<<endl;
cout<<"以大写方式输出进制数: "<<setiosflags(ios::uppercase)<<hex<<num<<endl;
cout<<"恢复小写方式输出进制数: "<<resetiosflags(ios::uppercase)<<hex<<num<<endl;
程序运行结果:
以大小写方式输出进制数:
16进制数(默认:小写方式):1fe
以大写方式输出进制数:1FE
恢复小写方式输出进制数: 1fe
(3) 用流成员函数put()输出字符
格式: put(字符型)
功能:输出单一个字符
//例13-2 用流成员函数put()反序输出一个字符串
#include <iostream>
using namespace std;
void main()
{
char str[]="Programming with C++";
for( int i=sizeof(str)/sizeof(str[0])-2 ; i>=0; i--)
cout.put(*(str+i));
cout.put('\n');
}
在C++中,默认的标准输入设备是键盘,在iostream文件中定义了cin输入流对象。
cin对象与提取运算符>>、变量名或数组名一起构成输入语句,形式为C++的格式化输出
:cin>>…>>…>>…;,能够连续输入多项内容。只要是基本数据类型,不管是int、double、float,还是char、char *等,都可以写成这种形式,这给用户提供了很大的方便。如果要输入用户自己定义的类型数据,就要用友元方式重载>>运算符,有关这方面内容在第8讲已有介绍。
(2) 用于字符输入的流成员函数
1)get( )函数
get的含义是“获取,得到”的意思,在C++中,get()函数的用法很灵活,既可以输入一个字符,也可以输入一串字符,而且内容还可以是回车、tab、空格等空白字符。它有三种形式:
a)不带参数的get()函数
格式:cin.get()
功能:读入一个字符(包括回车、tab、空格等空白字符)
char ch;
while( (ch=cin.get()) !=EOF) //EOF为文件结束符,按ctrl+z 输入
cout.put(ch);
b)带一个参数的get()函数
格式:cin.get(ch)
功能:读入一个字符,如果读取成功则返回非0值(真),如失败(遇到文件结束符)则函数返回0值(假)。
改写上一例:
char ch;
while(cin.get(ch))
{ cout.put(ch); }
c)带三个参数的get()函数
格式:cin.get(字符数组,字符个数n,终止字符)
或 cin.get(字符指针,字符个数n,终止字符)
3)带三个参数的get()函数 (续)
功能:从输入流中读取n-1字符,赋给字符数组或字符指针所指向的数组。如果在读取n-1个字符之前遇到终止字符,则提前结束。如果成功则返回非0,失败则返回0。
例:输入包含空格的字符串
char str[80];
cout<<"请输入一个字符串:";
cin.get(str,80,'\n');
cout<<str<<endl;
2) getline( )函数
其功能、用法与带三个参数的get( )一样,只是它的函数名更容易理解、记忆。
格式:cin.getline(字符数组或字符指针,字符个数n[,终止字符])
功能:与带三个参数的get()功能类似,从输入流中读取n-1字符,赋给字符数组或字符指针所指向的空间。如果在读取n-1个字符之前遇到终止字符(如果不写,默认为 ‘\n’),则提前结束。
(3) 几个与流操作有关的判断函数
eof()函数:是”end of file”的缩写,表示“文件结束”。到达文件末尾(即遇到文件结束符)时为“真”,否则为“假”。这个函数经常用到。
fail()函数:操作失败时返回“真”,操作成功时返回“假”。
!运算符经过了重载,它的功能与fail()函数相同,即: !cin 与 cin.fail() 等价
!cout 与 cout.fail() 等价
C++中的“流”(stream)是一种抽象,它表示数据从源端流向目的端。
输入流(Input Stream)表示的是数据从输入设备(如键盘、磁盘等)流向内存,输出流(Output Stream)表示的是数据从内存流向输出设备(如屏幕、打印机、磁盘等)。输入输出流(I/O Stream)是输入流和输出流的合称。
“流”中的内容可以是任意形式的数据,例如:ASCII字符、二进制形式的数据、图形、图像、声音等信息。
(2)C++将输入输出流(简称I/O流)分成三种类型:
标准输入输出流:流向标准输入输出设备(即键盘、显示器)的数据;
文件输入输出流:流向外存磁盘文件的数据;
字符串输入输出流:对内存中指定的空间(通常用一个字符数组作为存储空间)进行输入输出操作,流向这里的数据。
我们只对标准输入输出流、文件输入输出流进行讨论,对字符串输入输出流不作介绍。
(3)输入输出的类、类库
流类:在C++中定义的实现I/O的类;
流库:多个流类及其类层次集合;
C++中的流类由两类平行基类ios和streambuf组成,所有流类都通过这两个基类派生出来。
ios类是所有ios类层次的基类,提供输入/输出所需要的公共操作。
(1)输出流对象
cout:输出基本类型数据时,不必考虑数据是什么类型,系统会自动判断,选择相应的重载函数;输出用户自己定义的类型数据时,要重载<<运算符(具体见第8讲内容);
cerr:是在屏幕上显示出错信息,与cout用法类似,不同的是只能在屏幕上,而不能在磁盘文件上输出错误信息;
clog:用法与cerr类似,不同点是它带有缓冲区。
(2)格式输出
1)用格式控制符控制输出
输出不同进制的数:dec(十进制)、hex(十六进制)、oct(八进制)
例:
int n=20;
cout<<"设置进制: "<<endl;
cout<<"十进制: "<<n<<endl;
cout<<"十六进制: "<<hex<<n<<endl;
cout<<"八进制: "<<oct<<n<<endl;
cout<<"十进制: "<<dec<<n<<endl;
设置域宽:setw(n), n小于实际宽度时,按实际宽度输出,它一次只控制一个数值输出。
例:
int m=1234;
cout<<"设置域宽: "<<endl;
cout<<setw(3)<<m<<endl;
cout<<setw(5)<<m<<endl;
cout<<setw(10)<<m<<endl;
设置填充字符:setfill(c),需要与setw(n)合用
例:
int m=1234;
cout<<"设置填充字符: "<<endl;
cout<<setfill(‘*’)<<setw(5)<<m<<endl;
cout<<setw(10)<<m<<endl;
设置对齐方式:setiosflags(ios::left)(左对齐)、setiosflags(ios::right)(右对齐)
int m=1234;
cout<<"设置对齐方式"<<endl;
cout<<setfill(' ');
cout<<setiosflags(ios::left)<<setw(10)<<m<<endl;
cout<<setiosflags(ios::right)<<setw(10)<<m<<endl;
强制显示小数点和尾0:setiosflags(ios::showpoint)
强制显示符号:setiosflags(ios::showpos)
double d1=10/5,d2=22.0/7;
cout<<"显示小数点、尾和数符: "<<endl;
cout<<d1<<endl;
cout<<setiosflags(ios::showpoint)<<d1<<endl;
cout<<setiosflags(ios::showpos)<<d2<<endl;
cout<<resetiosflags(ios::showpos);
设置浮点数的输出是以科学记数法还是定点数
setiosflags(ios::scientific)(科学记数法)
setiosflags(ios::fixed)(定点数)
double dd=123.4567;
cout<<setiosflags(ios::scientific)<<dd<<endl;
cout<<setiosflags(ios::fixed)<<dd<<endl;
设置精度(有效数字):setpreciion(n)自动四舍五入
double dd=123.4567;
cout<<setprecision(2)<<dd<<endl;
cout<<setprecision(3)<<dd<<endl;
cout<<setprecision(4)<<dd<<endl;
cout<<setprecision(5)<<dd<<endl;
输出十六进制数时控制英文字母的大小写:setiosflags(ios::uppercase)
int num=510;
cout<<"以大小写方式输出进制数: "<<endl;
cout<<"16进制数(默认:小写方式):"<<hex<<num<<endl;
cout<<"以大写方式输出进制数: "<<setiosflags(ios::uppercase)<<hex<<num<<endl;
cout<<"恢复小写方式输出进制数: "<<resetiosflags(ios::uppercase)<<hex<<num<<endl;
程序运行结果:
以大小写方式输出进制数:
16进制数(默认:小写方式):1fe
以大写方式输出进制数:1FE
恢复小写方式输出进制数: 1fe
(3) 用流成员函数put()输出字符
格式: put(字符型)
功能:输出单一个字符
//例13-2 用流成员函数put()反序输出一个字符串
#include <iostream>
using namespace std;
void main()
{
char str[]="Programming with C++";
for( int i=sizeof(str)/sizeof(str[0])-2 ; i>=0; i--)
cout.put(*(str+i));
cout.put('\n');
}
在C++中,默认的标准输入设备是键盘,在iostream文件中定义了cin输入流对象。
cin对象与提取运算符>>、变量名或数组名一起构成输入语句,形式为C++的格式化输出
:cin>>…>>…>>…;,能够连续输入多项内容。只要是基本数据类型,不管是int、double、float,还是char、char *等,都可以写成这种形式,这给用户提供了很大的方便。如果要输入用户自己定义的类型数据,就要用友元方式重载>>运算符,有关这方面内容在第8讲已有介绍。
(2) 用于字符输入的流成员函数
1)get( )函数
get的含义是“获取,得到”的意思,在C++中,get()函数的用法很灵活,既可以输入一个字符,也可以输入一串字符,而且内容还可以是回车、tab、空格等空白字符。它有三种形式:
a)不带参数的get()函数
格式:cin.get()
功能:读入一个字符(包括回车、tab、空格等空白字符)
char ch;
while( (ch=cin.get()) !=EOF) //EOF为文件结束符,按ctrl+z 输入
cout.put(ch);
b)带一个参数的get()函数
格式:cin.get(ch)
功能:读入一个字符,如果读取成功则返回非0值(真),如失败(遇到文件结束符)则函数返回0值(假)。
改写上一例:
char ch;
while(cin.get(ch))
{ cout.put(ch); }
c)带三个参数的get()函数
格式:cin.get(字符数组,字符个数n,终止字符)
或 cin.get(字符指针,字符个数n,终止字符)
3)带三个参数的get()函数 (续)
功能:从输入流中读取n-1字符,赋给字符数组或字符指针所指向的数组。如果在读取n-1个字符之前遇到终止字符,则提前结束。如果成功则返回非0,失败则返回0。
例:输入包含空格的字符串
char str[80];
cout<<"请输入一个字符串:";
cin.get(str,80,'\n');
cout<<str<<endl;
2) getline( )函数
其功能、用法与带三个参数的get( )一样,只是它的函数名更容易理解、记忆。
格式:cin.getline(字符数组或字符指针,字符个数n[,终止字符])
功能:与带三个参数的get()功能类似,从输入流中读取n-1字符,赋给字符数组或字符指针所指向的空间。如果在读取n-1个字符之前遇到终止字符(如果不写,默认为 ‘\n’),则提前结束。
(3) 几个与流操作有关的判断函数
eof()函数:是”end of file”的缩写,表示“文件结束”。到达文件末尾(即遇到文件结束符)时为“真”,否则为“假”。这个函数经常用到。
fail()函数:操作失败时返回“真”,操作成功时返回“假”。
!运算符经过了重载,它的功能与fail()函数相同,即: !cin 与 cin.fail() 等价
!cout 与 cout.fail() 等价
相关文章推荐
- VC C/C++ 4种方法获取文件大小 Windows API
- C++的输入输出(二)
- C/C++ 关于64位整数输入输出
- C++/VC++ 命名及其他规范
- C/C++输入输出
- c/c++输入输出总结
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- C/C++/VC++ 变量命名规则
- Connecting through Http or Https for CE/Windows Mobile c++/vc++方法一
- C++和VC++中各种类型转换
- VB程序员们,羡慕C/C++/VC/Java 程序员吗? 羡慕汇编程序员吗?
- C/C++ 标准输入输出重定向
- VC与JavaScript交互(三) ———— JS调用C++
- C++输入输出注意事项总结
- VC++中使用MATLAB的C++数学库和MCC生成的程序(转)
- C/C++文件IO输入输出操作——FILE*、fstream、windowsAPI
- C++:智能指针_auto_ptr_vc版本
- VC不是梦想,C++需要自由的心 myan
- C++读系统时间,且读出毫秒的方法[VC和GCC]