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

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

C++的ios基类包括用于格式化cout对象的功能,可显示各种格式化特性。使用类作用域的静态常量,可以对ios基类进行配置,使cout对象显示尾部小数点、在正整数前面加上+号以及其他各种格式化能力。

类作用域的静态常量

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

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

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

独立标志

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

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

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

语法:

fmtflags setf (fmtflags);

参数:

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

以下是一个遵循 setf() 函数的 C++ 程序:

C语言:

#include 
using namespace std;

int main()
{
    double number = 31.43;

    cout.setf(ios_base::showpos);

    cout << "The output is: " <<
            number << endl;

    return 0;
}

输出

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 接收输入和显示八进制值

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

语法-

fmtflags setf (fmtflags, fmtflags);

参数:

  • 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将Class范围静态常量的结果作为独立的标志。

完成上述策略的C ++代码如下所示-

C++程序:

#include 
using namespace std;

int main()
{
    double number = 31.43;

    cout.setf(ios_base::fixed,
            ios_base::floatfield);
    cout.precision(4);

    cout << "The Output is: " <<
            number << endl;
    return 0;
}

输出

The Output is: 31.4300

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

语法:

void unsetf (fmtflags);

参数:

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

实现unsetf()函数的C++代码如下所示:

C++程序:

#include 
using namespace std;

int main()
{
    double number = 31.43;
    cout.setf(ios_base::fixed,
            ios_base::floatfield);
    cout.precision(4);
    cout << "The resulted number: " <<
            number << endl;

    cout.unsetf(ios_base::floatfield);

    cout << "The original number: " <<
            number << endl;

    return 0;
}

输出

The resulted number: 31.4300
The original number: 31.43

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程