c++语言程序设计字符,C++格式化输出(详解版)

前面已经介绍过可用于流对象的 I/O 操作符,特别是 setw(n)、fixed、showpoint、setprecision(n)、left 和 right 操作符。这些操作符都可以在 fstream、ofstream 和 ostringstream 对象上使用。

为了这些操作符的用法,可以假设需要一个函数,该函数釆用一个 double 类型的实参,表示一个项目的价格(以美元为单位),并返回一个以美元符号 $ 开头的字符串,将价格的数值精确到小数点后两位。例如,如果将 12.5 作为金额参数传递给函数,则函数将返回字符串 $12.50。使用 ostringstream 即可轻松编写该函数:

string dollarFormat(double amount)

{

//创建 ostringstream 对象

ostringstream outStr;

//设置信息格式并写入outStr

outStr << showpoint << fixed << setprecision(2);

outStr << '$' << amount;

//提取并返回outStr中的字符串

return outStr.str ();

}

下面的程序使用 dollarFormat 函数来编写一个整齐格式化的价格表。价格是以二维数组给出的。该程序设置了每个价格的格式并打印了一个包含所有价格的表格,每个价格均右对齐,列宽为 10:

//This program demonstrates the use of an ostringstream object to do sophisticated formatting.

#include

#include

#include

using namespace std;

string dollarFormat(double); // Function Prototype

int main()

{

const int ROWS = 3, COLS = 2;

double amount[ROWS][COLS] = {184.45, 7, 59.13, 64.32, 7.29, 1289 };

// Format table of dollar amounts right justfied in columns of width 10

cout << right;

for (int row = 0; row< ROWS; row++)

{

for (int column = 0; column < COLS; column++)

{

cout << setw(10) << dollarFormat(amount[row][column]);

}

cout << endl;

}

return 0;

}

string dollarFormat(double amount)

{

// Create ostringstream object

ostringstream outStr;

// Set up format information and write to outStr.

outStr << showpoint << fixed << setprecision(2);

outStr << '$' << amount;

// Extract and return the string inside outStr.

return outStr.str();

}

程序输出结果:

$184.45 $7.00

$59.13 $64.32

$7.29 $1289.00

表 1 列出了可以与 C++ 流对象一起使用的 I/O 操作符列表,并给出了简要含义描述。

表 1 C++流对象

操作符

描 述

Dec

以十进制格式显示后续数字

endl

写入新行并冲刷输出流

fixed

使用固定点表示法表示浮点数

flush

冲刷输出流

hex

以十六进制输入或输出

left

左对齐输出

oct

以八进制输入或输出

right

右对齐输出

scientific

使用科学表示法表示浮点数

setfill(ch)

使用 ch 填充字符

setprecision(n)

将浮点精度设置为n

setw(n)

将输出字段的宽度设置为n

showbase

打印数字时显示基数(进制)

noshowbase

打印数字时不要显示基数(进制)

showpoint

强制显示小数点和尾随零

noshowpoint

如果可能的话,不打印结尾零和小数点

showpos

在非负数前面打印一个加号

noshowpos

在非负数前面不打印加号

前面我们已经介绍过表 1 中的部分操作符。oct、dec 和 hex 操作符可以用于输入和输出流。它们允许使用八进制、十进制或十六进制数字系统读取或写入数字。

下面的程序演示了如何使用 cin 和 cout 读取和写入十进制、十六进制和八进制值。

//This program demonstrates input and output of numbers

//using the octal, decimal, and hexadecimal number systems.

#include

#include

using namespace std;

int main()

{

int a, b;

//Read two decimals and print hex and octal equivalents

cout << "Enter two decimal numbers: ";

cin >> a >> b;

cout << "The numbers in decimal: " << a << '\t1' << b << endl;

cout << "The numbers in hexadecimal: " << hex << showbase << a << '\t' << b << endl;

cout << "The numbers in octal: " << oct << a << '\t' << b << endl;

// Read some hexadecimals and print their decimal equivalents

cout << "Enter two hexadecimal numbers:";

cin >> hex >> a >> b;

cout << "You entered decimal " << dec << a << '\t' << b << endl;

// Read some octals and print their decimal equivalents

cout << "Enter two octal numbers:";

cin >> oct >> a >> b;

cout << "You entered decimal " << dec << a << '\t' << b << endl;

return 0;

}

程序输出结果为:

Enter two decimal numbers: 23 45

The numbers in decimal: 23      45

The numbers in hexadecimal: 0x17        0x2d

The numbers in octal: 027       055

Enter two hexadecimal numbers:17 2d

You entered decimal 23  45

Enter two octal numbers:27 55

You entered decimal 23 45

前面已经介绍过,当一个程序将数据写入一个打开的文件时,数据不会直接进入文件。相反,数据存储在与文件相关的输出缓冲区中,稍后在一个冲刷缓冲区的过程中才会传送到文件。通常情况下,如果缓冲区已满或文件关闭时,缓冲区才会被冲刷。endl 和 flush 操作符允许程序员随时冲刷缓冲区,从而强制将缓冲的数据传输到文件。

例如,以下语句将冲刷输出流的缓冲区:

outFile << flush;

scientific 操作符使得浮点数以科学计数法表示,即形式为 d.dddEdd。填充字符是当打印的数字未填满要打印的整个字段时写入的字符。默认情况下,填充字符为空。程序员可以使用 setfill 操作符来指定不同的填充字符。示例如下:

outFile << setfill ('%');

该语句将使用百分比字符(%)作为填充字符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值