如何使用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