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

来源:互联网 发布:网络发短信到手机 编辑:程序博客网 时间:2024/06/03 16:51

关于输出的进制问题:

通常情况下使用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::basefield ios_base::dec 使用基数10 ios_base::basefield ios_base::oct 使用基数8 ios_base::basefield ios_base::hex 使用基数16 ios_base::floatfield ios_base::fixed 使用定点计数法 ios_base::floatfield ios_base::scientific 使用科学计数法 ios_base::adjustfield ios_base::left 使用左对齐 ios_base::adjustfield ios_base::right 使用右对齐 ios_base::adjustfield ios_base::internal 符号或基数前缀左对齐,值右对齐

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

cout << left << fixed;

一些标准控制符

控制符 调用 boolalpha setf(ios_base::boolalpha) showbase setf(ios_base::showbase) showpoint setf(ios_base::showpoint) showpos setf(ios_base::showpos) uppercase setf(ios_base::uppercase) internal setf(ios_base::internal, ios_base::adjustfield) left setf(ios_base::left, ios_base::adjustfield) right setf(ios_base::right, ios_base::adjustfield) dec setf(ios_base::dec, ios_base::basefield) hex setf(ios_base::hex, ios_base::basefield) oct setf(ios_base::oct, ios_base::basefield) fixed setf(ios_base::fixed, ios_base::floatfield) scientific setf(ios_base::scientific, ios_base::floatfield)
1 0
原创粉丝点击