C++ 标准库提供了一套广泛的输入/输出功能,本章将讨论C++编程中最基本且最常见的输入/输出操作。
C++ 输入/输出发生在流中,即字节序列。如果字节从像键盘、磁盘驱动器或网络连接等设备流向主存,则称为输入操作;如果字节从主存流向显示屏幕、打印机、磁盘驱动器或网络连接等设备,则称为输出操作。
输入/输出库头文件
序号 |
头文件 |
功能与描述 |
1 |
<iostream> |
定义了标准输入流 cin 、标准输出流 cout 、非缓冲的标准错误流 cerr 和缓冲的标准错误流 clog 。 |
2 |
<iomanip> |
声明了用于格式化输入/输出的服务,如 setw 和 setprecision 等参数化的流操作符。 |
3 |
<fstream> |
声明了用于用户控制文件处理的服务。我们在文件和流相关的章节中会详细讨论。 |
4 |
<bits/stdc++.h> |
包括了大多数标准C++库,添加了大量的功能而无需单独指定每个库。这对于编码比赛特别有用。 |
标准输出流 cout
预定义对象 cout
是 ostream
类的一个实例。cout
被认为是连接到标准输出设备,通常是显示屏。cout
与插入操作符 <<
一起使用,如下例所示。
示例
#include <iostream>
using namespace std;
int main() {
char str[] = "Hello C++";
cout << "Value of str is : " << str << endl;
}
当上述代码被编译和执行时,它产生以下结果:
Value of str is : Hello C++
C++ 编译器还会确定要输出的变量的数据类型,并选择适当的插入操作符来显示值。插入操作符 <<
可以在一个语句中使用多次,如上例所示,endl
用于行末添加换行符。
标准输入流 cin
预定义对象 cin
是 istream
类的一个实例。cin
被认为是连接到标准输入设备,通常是键盘。cin
与提取操作符 >>
一起使用,如下例所示。
示例
#include <iostream>
using namespace std;
int main() {
char name[50];
cout << "Please enter your name: ";
cin >> name;
cout << "Your name is: " << name << endl;
}
当上述代码被编译和执行时,它会提示你输入一个名字。你输入一个值然后按回车键,会看到以下结果:
Please enter your name: cplusplus
Your name is: cplusplus
提取操作符 >>
可以在一个语句中使用多次。请求多个数据项可以使用以下方式:
cin >> name >> age;
这相当于以下两个语句:
cin >> name;
cin >> age;
标准错误流 cerr
预定义对象 cerr
是 ostream
类的一个实例。cerr
被认为是连接到标准错误设备,也是显示屏,但 cerr
是非缓冲的,每次对 cerr
的插入都会立即显示出来。
示例
#include <iostream>
using namespace std;
int main() {
char str[] = "Unable to read....";
cerr << "Error message : " << str << endl;
}
当上述代码被编译和执行时,它产生以下结果:
Error message : Unable to read....
标准日志流 clog
预定义对象 clog
是 ostream
类的一个实例。clog
被认为是连接到标准错误设备,也是显示屏,但 clog
是缓冲的,这意味着每次插入 clog
都可能导致其输出被保留在缓冲区直到缓冲区填满或者缓冲区被刷新。
示例
#include <iostream>
using namespace std;
int main() {
char str[] = "Unable to read....";
clog << "Error message : " << str << endl;
}
当上述代码被编译和执行时,它产生以下结果:
Error message : Unable to read....
虽然这些小例子中你看不到 cout
、cerr
和 clog
的区别,但是在编写和执行大型程序时这种区别就变得明显了。因此,显示错误信息时使用 cerr
流,而在显示其他日志消息时则应该使用 clog
。
使用 <bits/stdc++.h>
进行输入/输出
<bits/stdc++.h>
是一个非标准的头文件,在C++中,因为它不属于官方的C++标准库。相反,它是GCC特有的头文件,包含了大部分C++标准库。你也可以使用 <bits/stdc++.h>
进行输入和输出而无需使用另一个库。
示例
#include <bits/stdc++.h>
using namespace std;
int main() {
int number;
string name;
cout << "Welcome to TutorialsPoint!" << endl;
cout << "Please enter your name: ";
cin >> name;
cout << "Please enter a number: ";
cin >> number;
cout << "Hello," << name << " You entered " << number << endl;
vector<int> numbers;
cout << "Enter 4 numbers: ";
for (int i = 0; i < 4; ++i) {
int temp;
cin >> temp;
numbers.push_back(temp);
}
cout << "You entered the following numbers: ";
for (int num : numbers) {
cout << num << " ";
}
cout << endl;
sort(numbers.begin(), numbers.end());
cout << "Sorted numbers: ";
for (int num : numbers) {
cout << num << " ";
}
cout << endl;
return 0;
}
当上述代码被编译和执行时,它产生以下结果:
Welcome to TutorialsPoint!
Please enter your name: Aman
Please enter a number: 2006
Hello, Aman You 2006
Enter 4 numbers: 2
0
0
6
You entered the following numbers: 2 0 0 6
Sorted numbers: 0 0 2 6
因此,在这里,代替使用多个头文件如 <iostream>
、<string>
、<vector>
、<algorithm>
,我们仅仅使用 <bits/stdc++.h>
,因为它包含了所有必要的标准库来进行输入/输出操作、字符串处理、动态数组和算法,简化了你的代码并使其更整洁、更方便。它尤其适用于竞赛编程。