C++ 基本输入/输出
C++ 标准库提供了丰富的输入/输出功能,我们将在后续章节中介绍。本章将讨论 C++ 编程所需的最基本和最常见的 I/O 操作。
C++ I/O 以流(字节序列)的形式进行。如果字节从键盘、磁盘驱动器或网络连接等设备流向主存,这称为输入操作;如果字节从主存流向显示屏、打印机、磁盘驱动器或网络连接等设备,这称为输出操作。
I/O 库头文件
以下头文件对 C++ 程序很重要 -
Sr.No | 头文件 &函数和说明 |
---|---|
1 |
此文件定义了cin、clog和clog对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。 |
2 |
此文件声明了用于执行格式化 I/O 的服务,这些服务使用所谓的参数化流操作符,例如 setw 和 setprecision。 |
3 |
此文件声明了用户控制文件处理的服务。我们将在"文件和流"相关章节中详细讨论它。 |
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
C++ 编译器还会判断输入值的数据类型,并选择合适的流提取运算符来提取该值并将其存储在给定的变量中。
流提取运算符 >> 可以在单个语句中多次使用。要请求多个数据,可以使用以下命令:
cin >> name >> age;
这等同于以下两个语句:
cin >> name; cin >> age;
标准错误流 (cerr)
预定义对象 cerr 是 ostream 类的一个实例。 cerr 对象据说被附加到标准错误设备,该设备也是一个显示屏,但 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 插入数据都会导致其输出被保留在缓冲区中,直到缓冲区填满或缓冲区刷新为止。
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。
使用 bit/stdc++ 进行输入/输出
bits/stdc++.h 是 C++ 中的非标准头文件,因为它不属于官方 C++ 标准库。相反,它是一个 GCC 特定的头文件,包含了 C++ 中的大多数标准库。您也可以使用 bit/stdc++.h 进行输入和输出,而无需使用其他库。
示例
#include <bits/stdc++.h> using namespace std; int main() { int number; string name; // #include <iostream> // #include <string> 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; // 演示一些 STL 特性 // #include <vector> 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; // 排序并显示数字 // #include <algorithm> 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
因此,我们无需使用诸如
- #include <iostream>
- #include <string>
- #include <vector>
- #include <algorithm>
我们直接使用了 <bits/stdc++.h> ,因为它包含了输入/输出操作、字符串处理、动态数组和算法所需的所有标准库,从而简化了代码,使其更简洁、更方便。它尤其适用于竞技编程。