c++iomanip
时间: 2025-07-16 15:05:27 浏览: 1
### C++ 中 `<iomanip>` 头文件的用法
`<iomanip>` 是 C++ 标准库中的一个头文件,提供了多种用于格式化输入输出流的操作符和函数。这些工具可以用来控制数据的显示方式,比如设置字段宽度、精度、填充字符以及调整对齐方式等。
以下是几个常见的 `<iomanip>` 使用示例:
#### 设置字段宽度
通过 `std::setw(int width)` 函数来指定输出字段的最小宽度。
```cpp
#include <iostream>
#include <iomanip>
int main() {
std::cout << std::setw(10) << 123 << "\n"; // 输出右侧对齐,占位宽为10
}
```
上述代码会将整数 `123` 的输出宽度设为 10,不足部分以空格补齐[^3]。
---
#### 显示浮点数的小数点
使用 `std::setprecision(int digits)` 来设定浮点数的有效数字位数;结合 `std::fixed` 或 `std::scientific` 控制数值表示形式。
```cpp
#include <iostream>
#include <iomanip>
int main() {
double pi = 3.14159;
std::cout << std::fixed << std::setprecision(2) << pi << "\n"; // 输出固定两位小数:3.14
}
```
此代码片段设置了浮点数 `pi` 的输出格式为保留两位小数并采用定点记法。
---
#### 转换科学计数法到十进制
可以通过循环读取用户输入的数据,并利用 `<iomanip>` 提供的功能将其从科学计数法转换成普通的十进制定点表示。
```cpp
#include <iostream>
#include <iomanip>
int main() {
for (;;) {
double number;
std::cin >> number;
if (!std::cin.good()) break;
std::cout << std::setw(14) << std::showpoint << number << '\n';
}
return 0;
}
```
该程序不断接收用户的双精度浮点型输入,直到遇到非法输入为止。每次都会按照固定的宽度与样式打印结果。
---
#### 添加正号前缀
为了在非负数前面加上加号 (`+`) ,可调用 `std::ios::showpos` 成员函数或者直接应用对应的操纵器。
```cpp
#include <iostream>
int main() {
std::ostream os;
os.setf(std::ios::showpos);
os << 12; // 输出 +12
}
```
这里展示了如何启用带符号模式下的正值标记功能[^1]。
---
#### 文件追加写入而非覆盖原有内容
当创建基于磁盘存储的对象时,默认行为可能会清除已有记录。为了避免这种情况发生,则需显式声明附加标志参数给打开方法。
```cpp
#include <fstream>
void writeToFile(const char* filename, const char* content){
std::ofstream fout(filename, std::ios_base::out | std::ios_base::app);
if(fout.is_open()){
fout << content;
fout.close();
}
}
```
上面定义了一个简单的辅助函数,它接受目标路径名字符串指针作为第一个实参,消息体文本串作第二个形参传入后执行实际操作——即向指定位置添加新资料而不破坏旧有结构[^2]。
---
#### 整数转字符串及反之亦然
虽然这并不属于严格意义上的 `<iomanip>` 应用范畴之内,但在某些场景下可能需要用到类似的技巧完成不同类型之间的相互转变过程。
```cpp
// Integer to String Conversion Example
#include <string>
#include <sstream>
std::string intToString(int value){
std::ostringstream oss;
oss << value;
return oss.str();
}
// String to Integer Conversion Example
int stringToInt(const std::string& strValue){
try{
size_t pos;
int result = stoi(strValue,&pos);
if(pos != strValue.length())
throw std::invalid_argument("Trailing characters");
return result;
}catch(...){ /* Handle exceptions */ }
}
```
以上分别演示了两种基本类型的互相映射逻辑实现思路之一种版本[^4]。
---
阅读全文
相关推荐


















