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

📅  最后修改于: 2022-05-13 01:55:00.154000             🧑  作者: Mango

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

C++ ios_base 类具有格式化 cout 对象以显示不同格式化功能的方面。例如,以下 ios_base 类可以格式化 cout 对象以显示尾随小数点、在正数前添加 + 以及使用类范围静态常量的其他几个格式化功能。  

类作用域静态常量:

在 ios_base 类声明中定义的类范围静态常量可作为帮助格式化不同格式化功能的伴侣。类作用域意味着将作用域解析运算符(::) 与常量名称一起使用。 ios_base 类中定义的类范围静态常量是单独的位,也称为标志。要启用格式化功能,请设置标志或位,这意味着将位设置为 1。

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

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

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

S No.Formatting Constants NamePurpose       
1.ios_base::boolalphaDisplay bool values as “true” and “false”.
2.ios_base::showpointDisplay trailing decimal points.
3.ios_base::uppercaseUse uppercase letters for hex values, scientific notation.
4.ios_base::showposUse + before positive numbers.
5.ios_base::showbaseUse base prefixes 0x for hex values, 0 for Oct values. 

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 类中定义的 Class 范围静态常量的结果存储为位或标志。

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

C++
// C++ program to format cout object
// to display plus sign before positive 
// decimal numbers as C++ treats 
// hexadecimal and octal numbers 
// as unsigned.
#include 
using namespace std;
  
// Driver code
int main()
{
    double num = 21.34;
  
    // Setting the cout object 
    // to show plus sign
    cout.setf(ios_base::showpos);
  
    // Prints the result
    cout << "The result is: " << 
             num << endl;
  
    return 0;
}


C++
// C++ program to format cout 
// object to display in floating 
// point values
#include 
using namespace std;
  
// Driver code
int main()
{
    double num = 21.34;
  
    // Formatting the cout object 
    // to display in fixed-point 
    // notation
    cout.setf(ios_base::fixed, 
              ios_base::floatfield);
  
    // Instructing the cout object
    // to show precision of 4
    cout.precision(4);
        
      // Prints the result
    cout << "The result is: " << 
             num << endl;
    return 0;
}


C++
// C++ program to illustrate 
// unsetf() function
#include 
using namespace std;
  
// Driver code
int main()
{
    double num = 21.34;
  
    // Formatting the cout object
    cout.setf(ios_base::fixed, 
              ios_base::floatfield);
    cout.precision(4);
  
    // Prints the result
    cout << "The resulted number: " << 
             num << endl;
      
    // Restoring the cout object
    cout.unsetf(ios_base::floatfield);
  
    // Prints the original number
    cout << "The original number: " << 
             num << endl;
      
    return 0;
}


输出
The result is: +21.34

非独立标志:

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

Non-Independent FlagsConstantsPurpose     
ios_base::basefieldios_base::dec  To take input and display decimal values 
ios_base::octTo take input and display octal values
ios_base::hexTo take input and display hexadecimal values
ios_base::floatfieldios_base::fixedTo take input as fixed-point notation and display
in floating-point values
ios_base::scientificTo take input as scientific point notation and
display in floating-point values
ios_base::adjustfieldios_base::leftDisplay a value at the left end of the field.
ios_base::rightDisplay a value at the right end of the field.
ios_base::internalDisplay a value at the left of the field and the rest
of the number at the right of the field.

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

句法-

参数:

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

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

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

下面是实现上述方法的 C++ 程序——

C++

// C++ program to format cout 
// object to display in floating 
// point values
#include 
using namespace std;
  
// Driver code
int main()
{
    double num = 21.34;
  
    // Formatting the cout object 
    // to display in fixed-point 
    // notation
    cout.setf(ios_base::fixed, 
              ios_base::floatfield);
  
    // Instructing the cout object
    // to show precision of 4
    cout.precision(4);
        
      // Prints the result
    cout << "The result is: " << 
             num << endl;
    return 0;
}
输出
The result is: 21.3400

unsetf(): ios_base 类提供了一个unsetf()函数,它有一些方面可以恢复到原来的结果。 setf()函数将一个位设置为 1,而 unsetf()函数将一个位设置回 0。

句法:

参数:

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

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

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

C++

// C++ program to illustrate 
// unsetf() function
#include 
using namespace std;
  
// Driver code
int main()
{
    double num = 21.34;
  
    // Formatting the cout object
    cout.setf(ios_base::fixed, 
              ios_base::floatfield);
    cout.precision(4);
  
    // Prints the result
    cout << "The resulted number: " << 
             num << endl;
      
    // Restoring the cout object
    cout.unsetf(ios_base::floatfield);
  
    // Prints the original number
    cout << "The original number: " << 
             num << endl;
      
    return 0;
}
输出
The resulted number: 21.3400
The original number: 21.34