关于输出格式的一些总结——cout

关于输出的进制问题:

通常情况下使用cout输出,默认输出的是十进制,不管你在源代码里是用什么进制来保存这个数字的。
如果要输出十六进制或者八进制,应该先告诉cout,代码如下:

#include "iostream"
using namespace std;
int main() {
    int test = 42;
    cout << "decimal for test: " << test << endl;
    cout << hex;
    cout << "hexadecimal for test: " << test << endl;
    cout << oct;
    cout << "octal for test: " << test << endl;
    return 0;
}

cout << hex;并不是在屏幕上输出任何东西,而是告诉cout,接下来要输出的数字全部用十六进制输出。
(注意:对格式的修改并不局限于接下来的一行)

运行结果如图:

这里写图片描述

学会使用退格符:

#include "iostream"
#include "string"
#include "cstdlib"
using namespace std;
int main() {
    string name;
    cout << "Please enter your name:_____\b\b\b\b\b";
    //退格后,新输入的字符会替换掉下划线
    cin >> name;
    cout << "Hello!" << name << endl;
    return 0;
}

运行结果如图:

这里写图片描述

调整字段宽度:

成员函数width(int w)将字段宽度设置为w,并返回以前的字段宽度。这使得能够保存以前的值,以便以后恢复宽度值时使用。
注意,width()方法只影响将显示的下一个项目,然后字段宽度将恢复为默认值。如:

cout << '#';
cout.width(12);
cout << 12 << '#' << 24 << "#\n";

输出是

#          12#24#

说明:12倍放到宽度为12个字符的字段的最右边,这被称为右对齐,且不足的宽度用空格补足。然后,字段宽度恢复为默认值。

填充字符

在默认的情况下,cout用空格填充字段中未被使用的部分,可以用fill()成员函数来改变填充字符。例如,下面的函数调用将填充字符改为星号:

cout.fill('*');

新填充的字符将一直有效,直到更改它为止。

设置精度

precision(int)成员函数可以设置显示的位数.
或者是setprecision(int)非成员函数,该函数定义在iomanip头文件中

显示小数点后几位:

fixed使得输出按定点表示法(相比之于科学表示法)
交替使用fixed和precision(int)或者是setprecision(int)可以控制输出格式为固定的小数点后几位。

#include "iomanip"
#include "iostream"
using namespace std;

int main() {
    double temp = 28.3;
    cout.precision(5);
    cout << fixed << temp << endl;
    return 0;
}

或者:

#include "iomanip"
#include "iostream"
using namespace std;

int main() {
    double temp = 28.3;
    cout << fixed << precision(5) << temp << endl;
    return 0;
}

成员函数setf及其他

setf()函数的第一个原型为:

fmtflags setf(fmtflags);其中fmtflags用于储存格式标记,该名称是在ios_base类中定义的。
这个版本的setf()是用来设置单个位控制的格式信息,参数是一个fmtflags值,指出要设置哪一位。返回值是以前的设置。
具体的可用参数如下表:

参数含义
ios_base::boolalpha输入和输出bool值,可以为true或false
ios_base::showbase对于输出,使用C++基数前缀(0、0x)
ios_base::showpoint显示末尾的小数点
ios_base::uppercase对于十六进制输出,使用大写字母,E表示法
ios_base::showpos在正数前面加上+
setf()函数的第二个原型为:

fmtflags setf(fmtflags, fmtflags);
这里不深入解释两个参数的含义,简单粗暴地给出其具体可用参数和含义:

第二个参数第一个参数含义
ios_base::basefieldios_base::dec使用基数10
ios_base::basefieldios_base::oct使用基数8
ios_base::basefieldios_base::hex使用基数16
ios_base::floatfieldios_base::fixed使用定点计数法
ios_base::floatfieldios_base::scientific使用科学计数法
ios_base::adjustfieldios_base::left使用左对齐
ios_base::adjustfieldios_base::right使用右对齐
ios_base::adjustfieldios_base::internal符号或基数前缀左对齐,值右对齐

但是,使用setf()不是进行格式化的、对用户最为友好的方法,C++提供了多个控制符,能够调用setf()并自动提供正确的参数。
这些控制符的工作方式与下列格式相似:

cout << left << fixed;
一些标准控制符
控制符调用
boolalphasetf(ios_base::boolalpha)
showbasesetf(ios_base::showbase)
showpointsetf(ios_base::showpoint)
showpossetf(ios_base::showpos)
uppercasesetf(ios_base::uppercase)
internalsetf(ios_base::internal, ios_base::adjustfield)
leftsetf(ios_base::left, ios_base::adjustfield)
rightsetf(ios_base::right, ios_base::adjustfield)
decsetf(ios_base::dec, ios_base::basefield)
hexsetf(ios_base::hex, ios_base::basefield)
octsetf(ios_base::oct, ios_base::basefield)
fixedsetf(ios_base::fixed, ios_base::floatfield)
scientificsetf(ios_base::scientific, ios_base::floatfield)
  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值