如何使用 C++ IOS 库操作 cout 对象?

2024年8月28日 | 阅读 4 分钟

C++ 的 ios_base 类包含了用于格式化 cout 对象的各种方面,这些对象显示了不同的格式化特性。通过使用类作用域的静态常量,下面的 ios_base 类可以对 cout 对象进行样式设置,以显示尾随的小数点、在正整数前添加 + 号以及实现其他各种格式化功能。

类作用域的静态常量

在 ios_base 类声明中定义的类作用域静态常量有助于配置各种格式化功能。作用域解析运算符 (::) 与类作用域中的常量名一起使用。被称为标志(flags)的单个位是在 ios_base 类中声明的类作用域静态常量。要激活格式化功能,请将标志或位设置为 1,这表示该位被设置为 1。

有两种类型的类作用域静态常量

  • 独立标志意味着第二个参数不需要任何标志或位。
  • 非独立标志意味着我们必须为第二个参数使用一个标志或位。它提供了三组格式化标志作为第二个参数,以及两到三个常量作为第一个参数。

独立标志

下表显示了类作用域的静态独立格式化常量及其功能。

序号格式化常量名称目的
1ios_base::showpoint显示尾随的小数点。
2ios_base::showpos在正数前使用 + 号。
3ios_base::boolalpha将布尔值显示为 "true" 或 "false"。
4ios_base::showbase对十六进制值使用 0x 前缀,对八进制值使用 0 前缀。
5ios_base::uppercase对十六进制值和科学记数法使用大写字母。

setf(): ios_base 类包含一个用于设置特定位或标志的 setf() 函数。Setf() 函数返回两个原型。

语法

参数

  • fmtflags- 它将接受一个位或一个标志。
  • 返回值:它返回格式化常量的结果。
  • fmtflags 参数是一种位掩码类型,用于存储单个位值,并用于格式化标志或将位设置为 1。
  • cout 对象可以用来调用 Setf() 函数。例如:cout.setf(ios_base::showpos)。
  • 格式化常量的返回值可以被保存。例如,ios_base::fmtflags prev = cout.setf(ios_base::showpos)。因此,prev 将在 ios_base 类中声明的类作用域静态常量的结果保存为一个位或标志。

下面的 C++ 程序遵循 setf() 函数的用法

C 语言

输出

The output is: +31.43

非独立标志

下表显示了各种类作用域的静态非独立格式化常量及其特定功能值。

1. ios_base::adjustfield

常量目的
ios_base::left在字段的左端显示一个值。
ios_base::internal在字段的左侧显示一个符号,在右侧显示数字的其余部分。
ios_base::right在字段的右端显示一个值。

2. ios_base::floatfield

常量目的
ios_base::fixed接收定点输入并显示浮点值。
ios_base::scientific接收科学记数法输入并将其显示为浮点数。

3. ios_base::basefield

常量目的
ios_base::hex接收和输出十六进制值。
ios_base::dec接收输入并显示十进制数。
ios_base::oct接收输入并显示八进制值

静态类作用域字段将作为第二个参数,用于指定要清除哪些位,而常量将作为第一个参数,用于指定要设置哪些位。使用第二个原型,我们将调用 setf() 函数来格式化 cout 对象。

语法-

参数

  • fmtflags- 它只接受两个位或标志。
  • 返回值:它给出格式化常量的结果。
  • cout 对象可以用来调用 Setf() 函数。例如:cout.setf(ios_base::fixed, ios_base::floatfield)。
  • 第二个参数指定要移除哪个位。我们使用 setf() 函数将 cout 对象格式化为以定点表示法显示。常量 ios_base::fixed 将位从科学记数法转换为定点表示法。这被称为清除位。而第一个参数将这些位中的一个赋值为 1。
  • 格式化常量的返回值可以被保存。例如,ios_base::fmtflags prev_s = cout.setf(ios_base::fixed, ios_base::floatfield)。因此,在 ios_base 类中,prev_s 将类作用域静态常量的结果保存为单个标志。

下面是实现上述策略的 C++ 代码-

C++ 程序

输出

The Output is: 31.4300

unsetf(): ios_base 类包含一个 unsetf() 函数,可用于恢复初始结果。setf() 函数将位设置为 1,而 unsetf() 将其恢复为 0。

语法

void unsetf (fmtflags);

参数

  • fmtflags- 它接受一个位或标志。
  • 返回值:它不返回格式化常量的结果。

下面是实现 unsetf() 函数的 C++ 代码

C++ 程序

输出

The resulted number: 31.4300
The original number: 31.43