流操纵算子

输入输出相关的类

与输入输出操作相关的类

istream是用于输入的流类,cin就是该类的对象。
ostream是用于输出的流类,cout就是该类的对象。
ifstream是用于从文件读取数据的类。
ofstream是用于向文件写入数据的类。
iostream是既能用于输入,又能用于输出的类。
fstream 是既能从文件读取数据,又能向文件写入数据的类。

判断输入流结束

int x;
while(cin>>x){
}
return 0;
如果是从文件输入,比如前面有freopen(“some.txt”,”r”,stdin);
那么,读到文件尾部,输入流就算结束
如果从键盘输入,则在单独一行输入Ctrl+Z代表输入流结束

istream 类的成员函数

istream & getline(char * buf, int bufSize);
从输入流中读取bufSize-1个字符到缓冲区buf,或读到碰到‘\n’
为止(哪个先到算哪个)。
istream & getline(char * buf, int bufSize,char delim);
从输入流中读取bufSize-1个字符到缓冲区buf,或读到碰到delim字
符为止(哪个先到算哪个)。
两个函数都会自动在buf中读入数据的结尾添加\0’。,
‘\n’或
delim都不会被读入buf,但会被从输入流中取走。如果输入流中
‘\n’或delim之前的字符个数达到或超过了bufSize个,就导致读
入出错,其结果就是:虽然本次读入已经完成,但是之后的读入就
都会失败了。
可以用 if(!cin.getline(…)) 判断输入是否结束
bool eof(); 判断输入流是否结束
int peek(); 返回下一个字符,但不从流中去掉.
istream & putback(char c); 将字符ch放回输入流
istream & ignore( int nCount = 1, int delim = EOF );
从流中删掉最多nCount个字符,遇到EOF时结束。

流操纵算子

• 整数流的基数:流操纵算子dec(10进制),oct(8进制),hex(16进制),setbase(设置任意进制)
• 浮点数的精度(precision,setprecision)
• 设置域宽(setw,width)
• 用户自定义的流操纵算子
使用流操纵算子需要 #include

流操纵算子

• 整数流的基数:流操纵算子dec,oct,hex,setbase

int n = 10;
cout << n << endl;  结果:10
cout << hex << n << “\n”  结果:a
<< dec << n << “\n”  结果:10
<< oct << n << endl;  结果:12

控制浮点数精度的流操纵算子

precision, setprecision
 precision是成员函数,其调用方式为:
cout.precision(5);
 setprecision 是流操作算子,其调用方式为:
cout << setprecision(5); // 可以连续输出,其后都保留5位有
效数字
它们的功能相同。
指定输出浮点数的有效位数(非定点方式输出时)
指定输出浮点数的小数点后的有效位数(定点方式输出时)
定点方式:小数点必须出现在个位数后面
#include <iostream>
 #include <iomanip> 
int main() { 
double x = 1234567.89,y = 12.34567;
 int n = 1234567; int m = 12; 
 cout << setprecision(6) << x << endl << y << endl << n << endl << m; 
} 

输出: 1.23457e+006 12.3457 1234567 12

cout << setiosflags(ios::fixed) //定点输出
<< setprecision(6) << x << endl 
<< resetiosflags(ios::fixed) //取消以小数点位置的方式输出
 << x 

设置域宽的流操纵算子

设置域宽(setw,width)

int w = 4;   
char string[10]; 
cin.width(5); 
while(cin >> string){ 
cout.width(w++); 
cout << string << endl; 
cin.width(5); }

宽度设置有效性是一次性的,在每次读入和 输出之前都要设置宽度。

样例使用

#include <iostream>
 #include <iomanip> 
int main() { 
int n = 141; 
//1) 分别以十六进制、十进制、八进制先后输出 n 
 cout << "1) " << hex << n << " " << dec << n << " " << oct << n << endl; double x = 1234567.89,y = 12.34567; 
cout << "2) " << setprecision(5) << x << " " << y << " " << endl; 
//3) 保留小数点后面5位
 cout << "3) " << fixed << setprecision(5) <<  x << " " << y << endl ; //4) 科学计数法输出,且保留小数点后面5位 
 cout << "4) " << scientific << setprecision(5) <<x << " " << y << endl ;
// 结果  1) 8d  141  215 2) 1.2346e+006  12.346 3) 1234567.89000  12.34567 4) 1.23457e+006  1.23457e+001

//5) 非负数要显示正号,输出宽度为12字符,宽度不足则用'*'填补
 cout << "5) " << showpos << fixed << setw(12) << setfill('*') << 12.1 << endl; 
//6) 非负数不显示正号,输出宽度为12字符,宽度不足则右边用填充字符填充 
 cout << "6) " << noshowpos << setw(12) << left << 12.1 << endl; 
//7) 输出宽度为12字符,宽度不足则左边用填充字符填充
 cout << "7) " << setw(12) << right << 12.1 << endl; 
//8) 宽度不足时,负号和数值分列左右,中间用填充字符填充 
 cout << "8) " << setw(12) << internal << -12.1 << endl; cout << "9) " << 12.1 << endl; return 0; } 
 // 结果 5) ***+12.10000 6) 12.10000**** 7) ****12.10000 8) -***12.10000 9) 12.10000

用户自定义流操纵算子

格式

ostream &T(ostream &output){
return output<< }

因为 iostream 里对 << 进行了重载(成员函数)
ostream & operator <<( ostream & ( * p ) ( ostream & ) ) ;
该函数内部会调用p所指向的函数,且以 *this 作为参数
hex 、dec 、oct 都是函数

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值