C++ 标准输出流

标准输出流

ostream类定义了3个输出流对象,即cout、cerr、clog

  1. cout流在内存中开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl时,不论缓冲区是否已满,都立即输出流中的所有数据,然后插入一个换行符,并且刷新流(清空缓冲区)
  2. cerr流对象是 标准错误流 。作用是向标准错误设备输出有关出错信息。和cout的不同:cout可以被重定向输出到磁盘文件中,但是cerr流中的信息只能在显示器输出。cerr流中的信息是需要用户指定的。
  3. 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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值