C++输入/输出操作符简介

操纵符

操纵符 功能
dec 以十进制输入或输出
endl 换行刷新输出流
fixed 用定点符号表示浮点数d.ddd
flush 刷新输出流
hex 以十六进制输入或输出
left 左对齐
oct 以八进制输入或输出
right 右对齐
scientific 用科学记数法表示浮点数d.dddedd
setfill© 把c用做填充字符
setprecision(n) 设置浮点精度为n位
setw(n) 设置字段位数为n
showpoint 总是打印小数点和尾随零
noshowpoint 不打印尾随零,若可能,则去掉小数点
showpos 在非负数前显示+
noshowpos 在非负数前不显示+
skipws 忽略输入前的空白
noskipws 不忽略输入前的空白
ws 删除空白

操纵符dec,hex和oct

#include<iostream>
using namespace std;
int main()
{
    int i=91;
    cout<<dec<<i<<endl; //十进制 91
    cout<<oct<<i<<endl; //八进制 133
    cout<<hex<<i<<endl; //十六进制 5b
    cout<<i<<endl; //仍然十六进制 5b
    return 0;
}

在最后一行中不加操纵符,最后的输出仍是十六进制形式。原因是一旦cout的状态被操纵符(除了setw)改变,这种状态将保持不变,直到发生另一次改变。

操纵符setw

setw可以设置域宽。如果域宽少于所需位数,则仍将输出该项;如果大于所需位数,则该项将在它的最左边用空格填满指定的位数。域宽的默认值为0,所以每个数据项都是按其最小的位数输出的。setw在某一数据输出后,域宽又重新设为0.所以如果几个数据项都是要按某一特定的域宽进行写入,必须在每个项写入前进行设定。

 for(int i=1;i<=1000;i*=10)
 {
     cout<<setw(6)<<i<<endl;
 }
 结果:  
     1
    10
   100
  1000

操纵符setfill

用来定义特定的填充字符,当域宽大于输出项宽度时用该字符填充多余的位。填充符一旦设定,它的作用将一直持续到重新设置为止。

cout<<setfill('*');
for(int i=1;i<=1000;i*=10)
{
    cout<<setw(6)<<i<<endl;
}
结果:
*****1
****10
***100
**1000

操纵符setprecision与fixed

setprecision用来定义浮点数的精度,默认值为6
fixed用来定义浮点数的小数位数,默认值为6
两个一起用,可以设置浮点数的小数位数

 double a=1.05,b=10.15,c=200.87787;
 cout<<setprecision(5); //设置数字精度为5
 cout<<a<<endl;//1.05
 cout<<b<<endl;//10.15
 cout<<c<<endl;//200.88
  double a=1.05,b=10.15,c=200.87787;
  cout<<fixed<<setprecision(4); //设置小数位数为4
  cout<<a<<endl; //1.0500
  cout<<b<<endl; //10.1500
  cout<<c<<endl; //200.8779

操纵符left和right

用来设置域对齐方式是左对齐或右对齐

操纵符showpoint

操纵符showpoint强制显示小数点以及全部尾部0.默认值为6,默认情况下,浮点数以定点数打印还是以科学(指数)计数法打印,要以哪种方式打印占用更小的域宽来决定。使用操纵符showpoint可以强制浮点数以科学计数法打印,使用操纵符fixed强制浮点数以定点数打印。

float a=5,b=43.3,c=1024.31;
cout<<showpoint<<fixed<<setprecision(2);
cout<<a<<endl; //5.00
cout<<b<<endl; //43.30
cout<<c<<endl; //1024.31

如果不使用操纵符showpoint和fixed,则代码段

    float a=5,b=43.3,c=1024.31;
    cout<<setprecision(2); 
    cout<<a<<endl; //5
    cout<<b<<endl; //43
    cout<<c<<endl; //1e03

操纵符noskipws

撤销在输入前跳过空格操作,及读入空格。输入操作符>>的默认动作是在读入下一个输入项前忽略后面的空格,与c库函数scanf很相似,但有点差别:即使变量是char类型,操作符>>仍会在读入字符前忽略空格。而操作符noskipws可以取消该操作.

char c[10];
cin>>noskipws;
for(int i=0;i<5;i++)
{
    cin>>c[i]; //输入: a b c d e
}
for(int i=0;i<5;i++)
{
    cout<<c[i]; //输出:abcde
}
cout<<endl;

混合使用c和c++的输入/输出

ios::sync_with_stdio()
在程序中同时使用c的输入/输出库函数(如printf)和c++类库(如cout)会出现问题,因为这两个库中的读写操作不会自动同步。如果确实需要同时使用这两个库,应在调用任何输入输出函数前首先调用以上函数。该函数能满足c和c++输入/输出混用的要求。

猜你喜欢

转载自blog.csdn.net/qq_41822647/article/details/83928885