标准输出流(cout)
C++ 标准库提供了一组丰富的输入/输出功能,我们将在后续的章节进行介绍。本章将讨论 C++ 编程中最基本和最常见的 I/O 操作。
C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作。
| 头文件 | 函数及描述 |
|---|---|
| <iostream> | 该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。 |
| <iomanip> | 该文件通过所谓的参数化的流操纵器(比如 setw 和 setprecision),来声明对执行标准化 I/O 有用的服务 |
| <fstream> | 该文件为用户控制的文件处理声明服务。 |
如何利用这些文件控制输出
#include <cstdlib>
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
double num = 1234.56789;
cout << "1234.56789" << endl;
cout << num << endl;
cout << "after setting :" << endl;
return 0;
}
运行截图:

结论: cout 会对浮点数自动的四舍五入保留两位有效小数
- 要想保留后面的小数, 我们需要调用 <iomanip> 中的 setiosflags(ios::fixed) 固定的浮点显示
int main(){
double num = 1234.56789;
cout << "1234.56789" << endl;
cout << num << endl;
cout << "after setting :" << endl;
cout << setiosflags(ios::fixed)<<num << endl;
return 0;
}
运行截图:

与之相当的是 cout.setf()
- 具体用法:
cout.setf(ios::fixed);
cout << num << endl;
运行截图:

利用cout.precision()设置有效数字位数;
int main(){
double num = 1234.56789;
cout << "1234.56789" << endl;
cout << num << endl;
cout << "after setting :" << endl;
cout.precision(3);
cout << num << endl;
return 0;
}
运行截图:

可以发现当有效数位小于数字时改用科学计数法
cout.precision(7);//输出 7 位有效数字
cout << num << endl;
运行截图:

可以发现单独的使用cout.precision() 可以控制输出的有效数字;
- cout.precision() 与 setprecision() 效果相当;
cout << setprecision(3)<<num << endl;
运行截图:

精确到小数点后某位.
- 我们可以利用 cout.setf(ios::fixed) 和 cout.precision() 来做到控制输出.
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
double num = 1234.56789;
cout << "1234.56789" << endl;
cout << num << endl;
cout << "after setting :" << endl;
cout.precision(3);
cout.setf(ios::fixed);
cout << num << endl;
return 0;
}
运行截图:

- 使用完毕后想关闭设置,可以调用cout.unsetf()
- 关闭有效数位可以将有效数位设置为 -1 ;
cout.unsetf(ios::fixed);
cout.precision(-1);
cout << "after unsetf :" << endl;
cout << num << endl;
运行截图 :

当然关于cout的输出控制还有许多,这里不一 一举例,大致用法相同,其中
cout.setf 跟 setiosflags 功能一样,cout.precision 跟 setprecision 功能一样,cout.unsetf 跟 resetiosflags 功能一致;
- cout.setf常见的标志
| cout.setf(ios::fixed) | 功能 |
|---|---|
| boolalpha | 可以使用单词”true”和”false”进行输入/输出的布尔值. |
| oct | 用八进制格式显示数值. |
| dec | 用十进制格式显示数值. |
| hex | 用十六进制格式显示数值. |
| left | 输出调整为左对齐. |
| right | 输出调整为右对齐. |
| scientific | 用科学记数法显示浮点数. |
| fixed | 用正常的记数方法显示浮点数(与科学计数法相对应). |
| showbase | 输出时显示所有数值的基数. |
| showpoint | 显示小数点和额外的零,即使不需要. |
| showpos | 在非负数值前面显示”+(正号)”. |
| skipws | 当从一个流进行读取时,跳过空白字符(spaces, tabs, newlines). |
| unitbuf | 在每次插入以后,清空缓冲区. |
| internal | 将填充字符回到符号和数值之间. |
| uppercase | 以大写的形式显示科学记数法中的”e”和十六进制格式的”x”. |
- setiosflags 常见用法
| setiosflags | 功能 |
|---|---|
| setiosflags(ios::fixed) | 固定的浮点显示 |
| setiosflags(ios::scientific) | 指数表示 |
| setiosflags(ios::left) | 左对齐 |
| setiosflags(ios::right) | 右对齐 |
| setiosflags(ios::skipws) | 忽略前导空白 |
| setiosflags(ios::uppercase) | 16进制数大写输出 |
| setiosflags(ios::lowercase) | 16进制小写输出 |
| setiosflags(ios::showpoint) | 强制显示小数点 |
| setiosflags(ios::showpos) | 强制显示符号 |
求点赞, 求关注, 让我们一起进步, CSDN的伙伴们加油, 奥力给 !
这篇博客介绍了C++中如何使用`cout`进行输出格式控制,特别是针对浮点数的有效数字位数设定。通过`cout.precision()`和`cout.setf(ios::fixed)`等方法,可以精确控制小数点后的位数,并调整输出形式。
5064

被折叠的 条评论
为什么被折叠?



