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

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

C++的ios_base类具有将cout对象格式化以显示不同格式化特性的方面。例如,以下ios_base类可以格式化cout对象以显示尾随小数点,在正数前加“+”,以及使用类范围静态常量等几个格式化特性。

类范围静态常量:

在ios_base类声明中定义的类范围静态常量作为格式化不同格式化特性的辅助伴侣。类范围意味着使用常量名称的作用域分辨率运算符(::)。在ios_base类中定义的类范围静态常量是单独的位,也称为标志。要启用格式化特性,请设置标志或位,这意味着将位设置为1。

类范围静态常量可以是两种类型:

  • 独立标志- 这意味着不需要为第二个参数采取任何标志或位。
  • 非独立标志- 这意味着我们需要为第二个参数采取标志或位。它提供三组格式化标志作为第二个参数,并拥有两个或三个要用作第一个参数的常量。

独立标志: 下表演示了类范围静态独立格式化常量及其功能-

序号 格式化常量名称 目的
1. ios_base::boolalpha 以“true”和“false”显示布尔值。
2. ios_base::showpoint 显示尾随小数点。
3. ios_base::uppercase 在十六进制值、科学计数法中使用大写字母。
4. ios_base::showpos 在正数前使用“+”。
5. ios_base::showbase 使用基本前缀0x进行十六进制值、0进行八进制值。

setf(): ios_base类提供了一个setf()函数,其目的是设置单个位或标志。Setf()方法提供了两个原型。

语法:

fmtflags setf (fmtflags);

参数:

  • fmtflags- 它接受一个位或一个标志。

返回值: 它返回格式化常量的结果。

  • 参数fmtflags是一种位掩码类型,用于存储单个位值,并且其目的是格式化标志或将位设置为1。
  • Setf()函数可以通过使用cout对象调用。例如,cout.setf(ios_base::showpos)。
  • 类范围静态常量的返回值可以保存。例如,ios_base::fmtflags prev = cout.setf(ios_base::showpos)。因此,prev将类范围静态常量定义的结果存储为位或标志。

下面是实施setf()函数的C++程序:

// C++程序格式化cout对象
//在C++中将十六进制和八进制数字视为无符号数,因此要使正十进制数显示加号。
#include 
using namespace std;

//驱动代码
int main()
{
    double num = 21.34;

    //将cout对象设置为显示加号
    cout.setf(ios_base::showpos);

    //输出结果
    cout << "结果是: " <<
              num << endl;

    return 0;
}  
C++

输出

结果是:+21.34
C++

非独立标志:

下表演示不同类范围静态非独立格式化常量及其函数

非独立标志 常数
ios_base::basefield、ios_base::dec 以十进制格式输入和显示数值
ios_base::oct 以八进制格式输入和显示数值
ios_base::hex 以十六进制格式输入和显示数值
ios_base::floatfield、ios_base::fixed 以固定点表示法输入和显示浮点数值
ios_base::scientific 以科学计数法输入和显示浮点数值
ios_base::adjustfield、ios_base::left 在字段的左端显示数值。
ios_base::right 在字段的右端显示数值。
ios_base::internal 在字段的左侧显示数值,剩余数字在字段的右侧显示。

类范围静态字段 将用作第二个参数,以指示要清除哪些位,并将常量用作第一个参数,以指示要设置哪个位。我们将使用setf()函数来使用第二个原型格式化cout对象。

语法-

fmtflags setf (fmtflags, fmtflags);

参数:

  • fmtflags-它接受2位或标志。

返回值: 它返回格式化常量的结果。

  • 可以使用cout object调用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)。因此,prev_s将作为在ios_base类中定义的单个标志存储类范围静态常量的结果。

以下是实现上述方法的C++程序-

// C++程序,将cout对象格式化为浮点数格式显示
#include <bits/stdc++.h>
using namespace std;

// 主函数
int main()
{
    double num = 21.34;

    // 格式化cout对象为固定点表示法
    cout.setf(ios_base::fixed,
              ios_base::floatfield);

    // 告诉cout对象要显示的数字精度是4
    cout.precision(4);

    // 输出结果
    cout << "结果是: " <<
                num << endl;
    return 0;
}  
C++

输出

结果是: 21.3400
C++

unsetf(): ios_base类 提供了一个 unsetf() 函数,将其方面返回到原始结果。setf()函数将一个位设置为1,而unsetf()函数将一个位设置回0。

语法:

void unsetf (fmtflags);

参数:

  • fmtflags- 接受1位或标志。

返回值: 不返回格式化常量的结果。

下面是实现unsetf()函数的C++程序:

//C++程序,示范unsetf()函数
#include <bits/stdc++.h>
using namespace std;

// 主函数
int main()
{
    double num = 21.34;

    // 格式化cout对象为固定点表示法
    cout.setf(ios_base::fixed,
              ios_base::floatfield);
    cout.precision(4);

    // 输出结果
    cout << "结果数字: " <<
                num << endl;

    // 恢复cout对象
    cout.unsetf(ios_base::floatfield);

    // 输出原始数值
    cout << "原始数字: " <<
                num << endl;
    return 0;
}  
C++

输出

结果数字: 21.3400
原始数字: 21.34
C++

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册