标准输出流
ostream类定义了3个输出流对象,即cout、cerr、clog
- cout流在内存中开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl时,不论缓冲区是否已满,都立即输出流中的所有数据,然后插入一个换行符,并且刷新流(清空缓冲区)
- cerr流对象是 标准错误流 。作用是向标准错误设备输出有关出错信息。和cout的不同:cout可以被重定向输出到磁盘文件中,但是cerr流中的信息只能在显示器输出。cerr流中的信息是需要用户指定的。
- clog流对象也是 标准错误流 。作用也是在终端显示器上显示出错信息。他们之间有微小的区别:cerr是不经过缓冲区直接向显示器上输出有关信息,而clog中的信息存放在缓冲区中,等待缓冲区满或者遇到endl的时候向显示器输出(用起来效果差不多)。
cout << "hello" << endl;
cerr << "is a error" << endl;
clog << "clog error" << endl;
格式输出
有两种方法:
- 使用格式控制符控制输出格式
注意首先需要:
#include <iomanip>
dec--设置数值的基数为10
hex--设置数值的基数为16
oct--设置数值的基数为8
setfill(c)--设置填充字符c,c可以是字符常量,也可以是字符变量
setprecision(n)--设置浮点数的精度为n位,一般以十进制小数位输出,n代表有效数字,在以fixed(固定小数位数)和scientific(指数)形式输出时,n为小数位数
setw(n)--设置字段宽度为n位
setiosflags(ios:fixed)--设置浮点数为固定的小数位显示
setiosflags(ios:scientific)--设置浮点数以指数形式显示
setiosflags(ios:left)--设置数组左对齐
setiosflags(ios:right)--设置数据右对齐
setiosflags(ios:skipws)--忽略前导空格
setiosflags(ios:uppercase)--数据以十六进制输出时字母大写
setiosflags(ios:showpos)--输出正数时加“+”
举例:
#include <iostream>
#include <iomanip>
using namespace std;
int main(int argc, char const *argv[])
{
int a = 123445;
cout << dec << a << endl;
cout << oct << a << endl;
cout << setiosflags(ios::uppercase) << hex << a << endl;
double b = 1.238908;
cout << setiosflags(ios::fixed) << b << endl;
cout << dec << setiosflags(ios::scientific) << b << endl;
cout << dec << setiosflags(ios::fixed) << setprecision(7) << b << endl;
int c[10] = {1, 2237580, 3123, 4125 ,565636 ,6132412 ,70000, 81 ,92, 10};
// 右对齐和左对齐只有在设置了宽度的时候才有用
for (int i = 0; i < 10; ++i)
{
cout << setw(10) <<
setiosflags(ios::showpos) << c[i] << endl;;
}
return 0;
}
https://blog.csdn.net/weixin_38481963/article/details/79645469
- 使用流对象的成员函数控制输出格式
东西其实是一样的,不过是使用函数的形式来使用:
precision(n) | 设置实数的精度为n位 |
width(n) | 设置字段宽度为n位 |
fill(c) | 设置填充字符c |
setf() | 设置输出格式状态 |
unsetf() | 取消已经设置的输出格式状态 |
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
int a = 21;
cout.setf(ios::showbase);
cout << "dec: " << a << endl;
cout.unsetf(ios::dec);
cout.setf(ios::hex);
cout << "hex: " << a << endl;
cout.unsetf(ios::hex);
cout.setf(ios::oct);
cout << "oct: " << a << endl;
cout.unsetf(ios::oct);
char *pt = "China";
cout.width(10);
cout << pt << endl;
cout.width(10);
cout.fill('*');
cout << pt << endl;
double pi = 22/7.0;
cout.setf(ios::scientific);
cout << "pi = ";
cout.width(14);
cout << pi << endl;
cout.unsetf(ios::scientific);
cout.setf(ios::fixed);
cout.width(12);
cout.setf(ios::showpos);
cout.setf(ios::internal);
cout.precision(6);
cout << pi << endl;
return 0;
}