C++之输入输出流

输入输出流:
1. I/O(输入/输出)流类库提供对象之间的数据交互服务
流类库预定义了一批流对象,连接常用的外部设备
程序员可以定义所需的I/O流对象,使用流库提供的工作方式
实现数据传输
2.流类和流对象: 程序中,对数据的输入/输出是以字节流实现的
应用程序对字节序列作出各种数据解释
I/O系统的任务就是在内存和外部设备之间稳定可靠地传输数据
和解释数据。
流类对象可以建立和删除,可以从流中获取数据和向流添加数据
3.流类库: 流库(stream library)是用继承方法建立的输入输出类库
流库具有两个平行的基类:streambuf 和 ios 类,所有流类均以两者
之一作为基类
streambuf 类提供对缓冲区的低级操作
设置缓冲区 对缓冲区指针操作 向缓冲区存/取字符
ios 类及其派生类提供用户使用流类的接口,支持对streambuf 的缓
冲区输入/输出的格式化或非格式化转换

4.提供用户接口:

5.头文件

  iostream.h  包含操作所有输入/输出流所需的基本信息

    含有cin、cout、cerr、clog对象,提供无格式和格式化的I/O

  iomanip.h  包含格式化I/O操纵算子,用于指定数据输入输出的格式
  fstream.h  处理文件信息,包括建立文件,读/写文件的各种操作接口
  每种C++版本还包含其他一些与I/O相关的库,提供特定系统的某些功能
6.标准流:

(1)  cin  istream 类的对象,通常连向键盘,可以重定向

(2)  cout  ostream 类的对象,通常连向显示器,可以重定向

(3)  cerr  ostream 类的对象,连向显示器。不能重定向

(4)  clog  ostream 类的对象,连向打印机。不能重定向

7.istream的共有成员函数

函数

功能

read

无格式输入指定字节数

get

从流中提取字符,包括空格

getline

从流中提取一行字符

ignore

提取并丢弃流中指定字符

peek

返回流中下一个字符,但不从流中删除

gcount

统计最后输入的字符个数

eatwhite

忽略前导空格

seekg

移动输入流指针

tellg

返回输入流中指定位置的指针值

operstor>>

提取运算符

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void main()
 5 {
 6     char c;
 7     cout << "输入字符:\n";
 8     while((c=cin.get())!='\0')
 9     {
10         cout.put(c);
11     }
12     cout << endl;
13     cout << "再次输入字符:\n";
14     while(cin.get(c))
15     {
16         if(c == '\0')
17         {
18             break;
19         }
20         cout.put(c);
21     }
22     cout << endl;
23     char s[80];
24     cout << "最后输入字符:\n";
25     //指定输出字符数
26     cin.get(s,10);
27     cout << s << endl;
28 }

5.ostream的共有成员函数

函数

功能

put

无格式,插入一个字节

write

从无格式,插入一字节序列

flush

刷新输出流

seekp

移动输出流指针

tellp

返回输出流中指定位置的指针值

operstor<<

插入运算符

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void main()
 5 {
 6     char c[26];
 7     cin.getline(c,26);
 8     cout.write(c,26);
 9     cout << endl;
10 }

6.格式控制

  ios提供直接设置标志字的控制格式函数
  iostream和iomanip库还提供了一批控制符简化I/O格式化操作 
设置标志字:

状态标志              值               含义                             输入/输出

skipws            0X0001          跳过输入中的空白                I

left             0X0002          左对齐输出                   O

right             0X0004          右对齐输出                   O

internal             0X0008          在符号位和基指示符后填入字符          O

dec               0X0010          转换基制为十进制                I/O

oct               0X0020          转换基制为八进制                I/O

hex            0X0040           转换基制为十六进制               I/O

showbase          0X0080          在输出中显示基指示符             O

showpoint          0X0100           输出时显示小数点                 O

uppercase              0X0200          十六进制输出时一律用大写字母            O

showpos                0X0400          正整数前加“+”号                 O

scientific                 0X0800          科学示数法显示浮点数                O

fixed                  0X1000          定点形式显示浮点数                O

unitbuf               0X2000          输出操作后立即刷新流               O

stdio              0X4000          输出操作后刷新stdout 和 stdree          O

7.IOS控制格式的函数:

函数

功能

long flags( long lFlags );

long flags() const;

用参数lFlags更新标志字

返回标志字

long setf( long lFlags );

long setf( long lFlags, long lMask );

设置lFlags指定的标志位

将lMask指定的位清0,然后设置lFlags指定位

long unsetf( long  lMask );

将参数lMask指定的标志位清0

int width( int nw );

设置下一个输出项的显示宽度为nw

char fill( char cFill );

空白位置以字符参数cFill填充

int precision( int np );

用参数np设置数据显示精度

8.设置输出宽度

 1 #include<iostream>
 2 using namespace std;
 3 //设置输出宽度 
 4 int main()
 5 { char *s = "Hello";
 6    cout.fill( '*' ) ;    //设置填充符            
 7    cout.width( 10 ) ;    //设置输出宽度
 8    cout.setf( ios :: left ) ;    //设置左对齐
 9    cout << s << endl ;
10    cout.width( 15 ) ;    //设置输出宽度
11    cout.setf( ios :: right, ios :: left ) ;    //消除左对齐标志位,设置右对齐    
12    cout << s << endl ;
13 } 

8.不用基数形式的输出和输入

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 { int a , b , c ;
 5    cout << "please input a in decimal: " ;
 6    cin >> dec >> a ;
 7    //cin.setf( ios :: dec , ios :: basefield ) ;
 8    //cin >> a ;    //十进制输入
 9 
10    cout << "please input b in hexadecimal: " ;    
11    cin >> hex >> b ;
12    //cin.setf( ios :: hex , ios :: basefield ) ;
13    //cin >> b ;     //十六进制输入
14 
15    cout << "please input c in octal: " ;
16    cin >> oct >> c ;
17    //cin.setf( ios :: oct , ios :: basefield ) ;
18    //cin >> c ;     //八进制输入
19 
20    cout << "Output in decimal :\n" ;
21    cout <<"a = "<<a<<" b = "<<b<<"  c = "<<c<<endl ;
22    //cout.setf( ios :: dec, ios :: basefield );            //十进制输出
23    //cout << "a = " << a << "  b = " << b << "  c = " << c << endl ;
24 
25    cout <<hex<<"a = "<<a<<" b = "<<b<<" c = "<<c<<endl ;
26    //cout.setf( ios :: hex , ios :: basefield ) ;        //十六进制输出
27    cout << "Output in hexadecimal :\n" ;
28    cout << "a = " << a << "  b = " << b << "  c = " << c << endl ;
29 
30    cout <<oct<<"a = "<<a<<" b = "<<b<<" c = "<<c<<endl ;
31 
32    //cout.setf( ios :: oct , ios :: basefield ) ;        //八进制输出
33    //cout << "Output in octal :\n" ;
34    cout << "a = " << a << "  b = " << b << "  c = " << c << endl ;
35 }

 

9,格式化输出浮点数

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 { double x = 22.0/7 ;
 5    int i ;
 6    cout << "output in fixed :\n" ;
 7    cout.setf( ios::fixed | ios::showpos ) ;         // 定点输出,显示 +
 8    for( i=1; i<=5; i++ )
 9       { cout.precision( i ) ;  cout << x << endl ; }
10    cout << "output in scientific :\n" ;
11    // 清除原有设置,科学示数法输出
12    cout.setf(ios::scientific, ios::fixed|ios::showpos ) ;    
13    for( i=1; i<=5; i++ )
14       { cout.precision(i) ;   cout << x*1e5 << endl ; }
15 }

10.格式控制符

   控制符是istream和ostream类定义了一批函数,作为重载插入运算符 << 或提取运算符 >> 的右操作数控制I/O格式
iostream几个常用的控制符

控制符

功能

输入/输出

endl

输出一个新行符,并清空流

O

ends

输出串结束符,并清空流

O

flush

清空流缓冲区

O

dec

用十进制表示法输入或输出数值

I/O

hex

用十六进制表示法输入或输出数值

I/O

oct

用八进制表示法输入或输出数值

I/O

ws

提取空白字符

I

 

 

 

11.iomanip的控制符

控制符

功能

输入/输出

resetiosflags ( ios::lFlags )

清除lFlags指定的标志位

I/O

setiosflags ( ios::lFlags )

设置lFlags指定的标志位

I/O

setbase ( int base )

设置基数,base = 8,10,16

I/O

setfill ( char c )

设置填充符c

O

setprecision ( int n )

设置浮点数输出精度

O

setw ( int n )

设置输出宽度

O

 1 // 例11-7  整数的格式化输出
 2 #include <iostream>
 3 #include <iomanip>
 4 using namespace std ;
 5 int main()
 6 { const int k = 618 ;
 7    cout << setw(10) << setfill('#') << setiosflags(ios::right) << k <<endl ;
 8    cout << setw(10) << setbase(8) << setfill('*')
 9            << resetiosflags(ios::right) << setiosflags(ios::left) << k << endl ;
10 } 

 

posted @ 2015-03-14 14:49  溈鉨wo乄菰単  阅读(331)  评论(0编辑  收藏  举报