C++ 基本输入/输出


C++ 标准库提供了一组广泛的输入/输出功能,我们将在后续章节中看到这些功能。本章将讨论 C++ 编程所需的非常基本和最常见的 I/O 操作。

C++ I/O 发生在流中,流是字节序列。如果字节从键盘、磁盘驱动器或网络连接等设备流向主存储器,则称为输入操作;如果字节从主存储器流向显示屏、打印机、磁盘驱动器等设备,则称为输入操作,或者网络连接等等,这就是所谓的输出操作

I/O 库头文件

以下头文件对 C++ 程序很重要 -

先生编号 头文件&功能及说明
1

<输入输出流>

该文件定义了cin、cout、cerrclog对象,分别对应标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。

2

<iomanip>

该文件声明了对于使用所谓的参数化流操纵器(例如setwset precision )执行格式化 I/O 有用的服务。

3

<fstream>

该文件声明用于用户控制的文件处理的服务。我们将在文件和流相关章节中详细讨论它。

标准输出流 (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;
 
}

当上面的代码编译并执行时,它会提示你输入一个名称。您输入一个值,然后按 Enter 键以查看以下结果 -

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。