C++中cout格式化输出的相关函数与控制符

cout<<

  • <<为插入运算符,重载后可识别C++中的所有基本类型(unsigned signed char short int long float double以及组合)
ostream&  operator<<(type);
  • 通过看上面的函数原型。由于返回输出运算符引用,即cout。可实现拼接(一行中多次输出)
char name[10] = "hello";
char* p = name;
cout<<"hello"<<name<<p;//三种方式输出都是hello
cout<<(void*)p;//输出p所指向的字符串的地址
cout << *p; //输出h字符

put()与write()

  • put用来显示字符,write用来显示字符串

ostream & put(char)

cout.put('W').put('t');//输出W和t,可以拼接
cout.put(65).put(65.5);//double值65.5和int值65转换成char值65,显示其ASCII码为65的字符A

basic_ostream<charT,traits>& write(const char_type* s,streamsize n);

  1. 第一个参数提供要显示的字符的地址;
  2. 第二个参数指出要显示多少个字符。
  3. 使用cout调用时,会让模板调用char具体化,返回ostream&,即cout。
char* name = "hello";
cout.write(name,3);//将输出hel3个字符
cout.write(name,10);//将把内存中hello后面的数据输出,直到输出10个字符
long val = 48cout.write(val,1);//由于计算机为小端,输出第8位所对应的字符(ASCII中48对应字符为0)
cout.write(val,2);//第二个参数为2或更大时会出现乱码

刷新输出缓冲区

flush(cout);//#1
cout<<flush;//#2
cout<<endl;//#3
  1. 缓冲区为512字节或其整数倍,写满时将自动刷新输出缓冲区;
  2. 程序结束时将刷新缓冲区;
  3. 有输入(cin)时,将刷新缓冲区(将cin上面的cout全部输出);
  4. 遇到flush(上面的#1和#2)时,刷新缓冲区(由于<<运算符重载,#2将被替换成#1)
  5. 遇到endl(#3)时,刷新缓冲区,并插入一个换行符

用cout格式化

修改显示时用的计数系统

hex(cout);//十六进制
cout<<hex;//同上等价
dec(cout);//decimal,十进制(默认)
cout<<dec;//同上等价
oct(cout);//octal,八进制
cout<<oct;//同上等价

调整字符宽度

int width();
int width(int i);
  • 将字段宽度设置为i个空格(没有参数就不设置);
  • 返回修改前的字段宽度。
    注意:
    1. width()方法只影响接下来显示的一个项目,然后字段宽度被恢复为默认值(0)。
    2. C++永远不会截短数据。即,当i小于输出字段时,这个函数将不起作用,而且也算完成了一个项目,恢复默认值。
    3. 无法拼接

填充字符

cout.fill('*');
  • 与width配套使用,参数可以使任意char字符。
  • 与width不同的是,fill一直有效,直到被重新设置

设置浮点数的显示精度

cout.precision(2);
  • C++默认精度为6位,小数点后的末尾0不显示。
  • 浮点精度取决于输出模式:
    1. 默认模式——>指的是显示的总位数
    2. 定点模式——>指的是显示小数点后的位数
    3. 科学模式——>指的是显示小数点后的位数,指数和这个无关

setf函数与所对应的控制符

  • 补充:
    1. fmtflags指的是要输入ios_base中的静态变量。
    2. ios_base派生ios;ios派生istream和ostream;istream和ostream派生iostream。
fmtflags setf(fmtflags);
fmtflags setf(fmtflags,fmtflags);
  • 第一个参数包含了所需设置的fmtflags值(每一位的0和1都表示一种状态的开关)
  • 第二个参数指出要清除第一个参数中的哪些位(聪明的编译器会自动做)
  • 例:
cout.setf(ios_base::showpoint);//打印小数点和末尾的0
ios_base::fmtflags old=cout.setf(ios_base::left.ios_base::adjustfield);//放弃之前对齐方式,变成左对齐。并返回之前的状态。
  • 由于setf时函数,所以不能用<<来实现。可以用控制符来实现相同的功能
cout<<showpoint;//与上面函数等价,而且可以拼接

相关表格

  • setf(long)的参数
    setf(long)的参数
  • setf(long, long)的参数
    setf(long, long)的参数
  • 标准控制符与函数的对应
    标准控制符与函数的对应
    这里写图片描述

头文件iomanip中的输出控制符

cout<<setprecision(2);//等价于cout.precision(2);
cout<<setfill('*');//等价于cout.fill('*');
cout<<setw(5);//等价于cout.width(5);

记住要加头文件<iomanip>
以上为控制符,可直接使用,可拼接!

猜你喜欢

转载自blog.csdn.net/lingfeng2019/article/details/78453794