C++ 输入输出流

C++ 预定义了一些 I/O 流对象来实现输入输出,这些 I/O 流对象关联相应设备(键盘、显示器等)并实现程序和设备之间的数据传输。
C++ 预定义的 I/O 流对象有4个:cout 、cin 、cerr 和 clog,其中:

  • cout 代表标准输出流,关联显示器;
  • cin 代表标准输入流,关联键盘;
  • cerr 和 clog 代表标准错误流,也关联显示器。

【 1. iostream、using namespace std 】

由于流对象的输入输出功能在 iostream 类库中实现,流对象则在名字空间 std 中定义,所以要使用上述输入输出方法需要包含 iostream 类库和加载名字空间 std 。相应的语句为:

#include 		// 包含I/O流库iostream
using namespace std;	// 加载名字空间std

【 2. 输入输出流 】

cin 和流提取运算符>>一起实现数据输入,cout、cerr 和 clog 和流插入运算符<<一起实现数据输出。

例如:

#include 		// 包含I/O流库iostream
using namespace std;	// 加载名字空间std
int main(void)
{
	int a,b;
	cin >> a >> b;     // 输入两个整数分别给 a 和 b
	cout << a + b << " " << a - b;     // 输出 a+b 和 a-b 的值,中间用空格隔开
	return 0;
}

运行结果:
C++ 输入输出流_第1张图片

【 3. 流操纵算子 】

C++ 中通过流操纵算子来实现格式控制。流操纵算子在头文件 iomanip 中定义,因此要使用这些流操纵算子,必须包含该头文件。

#include 		// 包含流操作算子库

C++ 的 iomanip 库提供了多种流操纵算子,来实现不同的格式控制功能,包括

  • 设置域宽
  • 设置精度
  • 设置和清除格式化标志
  • 设置域填充字符
  • 在输出流中插入空字符
  • 跳过输入流中的空白字

C++ 输入输出流_第2张图片

控制进制基数 setbase()

对于标准输出流 cout 可以使用 setbase 来设置输出整数的进制基数(只支持8、10、16进制),如:

cout << setbase(8) << n << endl;	// 以八进制形式输出整数n

也可以直接使用流操纵算子 oct(八进制)、hex(十六进制)和 dec(十进制)直接控制输出整数的进制,如:

cout << hex << n << endl;	// 以十六进制输出整数n

设置浮点数输出精度

流操纵算子 setprecision 或函数 precision 都可以设置浮点数输出的精度,其参数为输出浮点数的有效数字个数(包括整数部分和小数部分,如12.34的有效数字个数为4)。

  • 例如按5位有效位输出12.3 * 3.578的值:
cout << setprecision(5) << 12.3 * 3.578 << endl;

或者:

cout.precision(5);
cout << 12.3 * 3.578 << endl;

以上输出结果均为:44.009

设置辅助格式

流操纵算子 setiosflags 可以辅助设置流输入输出格式,其参数是该流的格式标志值,setiosflags 提供了不同的参数来支持不同的输入输出格式需求。
C++ 输入输出流_第3张图片

  • 例如:
double x = 1.23;
cout << setprecision(5) << x << endl;
cout << setiosflags(ios::showpoint) << setprecision(5) << x << endl;

输出结果为:
1.23
1.2300

域宽

对于域宽,函数 width 和 流操纵算子 setw 都可以实现对当前域宽(即输入输出的字符数)的设置。

  • 如果输出的数据所需的宽度比设置的域宽小,空位用填充字符(默认为空格)填充;
  • 如果被显示的数据所需的宽度比设置的域宽大,系统会自动突破宽度限制,输出所有位。
  • 例如:
cin >> n;
cout << setw(6) << n << endl;     // 以域宽输出 n,如果 n 不足位,前面补空格

更多关于 iomanip 库的使用可点击关键字进入了解:setprecision 、iomanip 、setprecision、fixed、showpoint的用法总结 。

你可能感兴趣的:(C++)