C++ 基本输入输出 (cin, cout, cerr, clog)

25 Apr 2025 | 10 分钟阅读

C++ I/O 操作使用流的概念。一系列字节或数据流被称为流,它可以是输入流或输出流。这可以提高程序的性能。

输出操作: 如果字节从主内存传输到设备,例如 打印机、显示屏、网络连接等,则称为输出操作。

  • 输出流 (ostream): 用于向显示器等设备写入输出。

输入操作: 当数据字节从键盘等输入设备流向系统的内存时,称为输入操作。

  • 输入流 (istream): 用于从键盘等设备读取输入。

C++ 基本输入输出示例

这是一个演示基本 I/O 的简单程序

示例

编译并运行

输出

Enter your name: Alice
Enter your age: 28
Enter your height in meters: 5.8

--- User Details ---
Name: Alice
Age: 28 years
Height: 5.8 meters

说明

在此示例中,程序使用 cin 通过终端获取用户输入数据。之后,程序通过多个输入接受各种数据类型,包括字符串、整数和浮点数。输出的格式依赖于 cout 来使用插入运算符。

理解 C++ 中的流

C++ 中,流充当抽象,提供对设备的访问,这些设备用于读取或写入数据。iostream 库引入了四个标准流元素,其中包括:

  • cin (标准输入): 从键盘读取输入。
  • cout (标准输出): 将输出写入屏幕。
  • cerr: 程序错误通过 cerr (标准错误) 写入屏幕。
  • clog: clog 流缓冲区会将日志消息写入标准日志通道。

C++ 中的流如何工作?

C++ 中的流使用运算符进行操作

  • << (插入运算符): 与 cout 一起用于输出。
  • >> (提取运算符): 与 cin 一起用于输入。

C++ I/O 头文件及其功能

在 C++ 中,通过头文件提供预定义的函数和声明,使我们无需从头开始编写新代码即可完成特定任务。用于输入/输出操作的一些重要头文件包括用于有效执行输入和输出任务的函数。让我们讨论主要的输入/输出操作头文件:

头文件功能和描述
<iostream>它用于定义 cout, cin 和 cerr 对象,它们分别对应于标准输出流、标准输入流和标准错误流。
<iomanip>它用于声明有用的服务来执行格式化 I/O,例如 setprecision 和 setw。
<fstream>它用于声明用于用户控制文件处理的服务。

1. iostream

它是 C++ 中输入/输出操作最重要的头文件之一。“input-output”流的缩写。为了处理各种形式的输入/输出流,iostream 头文件包含了 istream(输入流)和 ostream(输出流)类以及其派生类 ifstream、ofstream 和 stringstream。

cin(标准输入)和 cout(标准输出)是此头文件中最常用的类,它们允许我们读取用户输入并将输出显示在控制台上。

C++ iostream 示例

让我们以一个例子来演示 C++ 中的 iostream 头文件。

示例

编译并运行

输出

Enter a number: 42
You entered: 42

说明

通过 iostream 头文件,用户可以使用 cin 作为输入流和 cout 作为输出流执行输入输出操作。cin >> num 命令提取用户输入,而 cout << num 允许显示输入数据。endl 操纵器结合换行符和输出缓冲区刷新,以提供即时显示。

2. iomanip

此头文件代表“输入输出操作”。它提供了格式化输入和输出的工具。它允许我们修改输入和输出的对齐、宽度、精度和其他格式化功能。

iomanip 头文件中常用的函数有 setw、setprecision、fixed、left、right 等。它特别适用于以特定方式呈现数据。

C++ iomanip 示例

让我们以一个例子来演示 C++ 中的 iomanip 头文件。

示例

编译并运行

输出

Value of pi: 3.14

说明

在此示例中,iomanip 头文件通过其 fixed 常量启用流格式化,该常量设置了固定点显示,并使用 setprecision(2) 将小数精度限制为两位。流插入运算符 << 将 pi 的格式化值发送到控制台显示。

3. fstream

文件输入/输出操作的头文件称为 fstream。它包含用于从文件中读取和写入文件的类 ifstream(输入文件流)和 ofstream(输出文件流)。系统使用这些类来打开只读和只写文件。

C++ fstream 示例

让我们以一个例子来演示 C++ 中的 fstream 头文件。

示例

编译并运行

输出

The file was written successfully.

说明

在此程序中,我们使用 fstream 头文件,它允许用户通过将“Hello File I/O!”插入到 outputFile.txt 中来执行文件输出 (ofstream) 和文件输入 (ifstream)。outputFile.close() 命令永久结束文件流,is_open() 函数评估文件打开状态。

使用 Namespace Std

在 C++ 中,我们经常在头文件之后使用“using namespace std;”。namespace std; 语句在 C++ 中被广泛用于在处理标准库组件时简化代码。

命名空间 (namespace) 是一种用于分组相似标识符(包括类、函数变量)以防止命名冲突的技术。C++ 标准库在 std 命名空间下提供了其组件(如 cin, cout 等)。现在让我们讨论为什么使用 using namespace std; 语句。

未使用 using namespace std

使用 using namespace std

正如我们所见,使用 namespace std; 语句允许我们在访问标准库组件时省略 std:: 前缀。这使得我们的代码更短、更具可读性,因为我们不必在每个标准库标识符前重复 std::。

I/O 库头文件

C++ 中有几个输入/输出头文件,如下所示:

标准输出流 (cout)

cout 对象是一个 ostream 类预定义对象。它连接到标准输出设备,通常是显示屏。cout 与流插入运算符 (<<) 结合使用,在控制台上显示输出。

C++ 标准输出流示例

让我们看一个 C++ 中标准输出流 (cout) 的简单示例。

示例

编译并运行

输出

Value of ary is: Welcome to the C++ tutorial

说明

ostream 类包含 cout 作为对象,它允许用户通过控制台显示信息。流插入运算符 << 允许程序输出值。

标准输入流 (cin)

cin 是 istream 类的预定义对象。它连接到标准输入设备,通常是键盘。cin 与流提取运算符 (>>) 结合使用,以从控制台读取输入。

C++ 标准输入流示例

让我们看一个 C++ 中标准输入流 (cin) 的简单示例。

示例

编译并运行

输出

Enter your age: 22
Your age is: 22

说明

cin 对象属于 istream,它允许读取控制台输入。>> 流提取运算符允许程序将用户输入放入变量中。程序输入函数 cin >> age 读取用户生成的整数并将其存储在 age 变量中。

标准换行符 (endl)

endl 是 ostream 类的预定义对象。它用于插入一个新字符并刷新流。

C++ 标准换行符示例

让我们看一个 C++ 中标准换行符 (endl) 的简单示例。

示例

编译并运行

输出

C++ Tutorial Tpointtech
End of line

说明

ostream 类操纵器 endl 添加一个新行字符并清除缓冲区数据以立即显示。示例中的代码 "End of line" << endl 会导致 "End of line" 显示,然后它会移动到下一行。

无缓冲标准错误流 (cerr)

cerr 代表“标准错误”。它是一个无缓冲流,意味着发送到 cerr 的输出会立即显示在控制台上,而不会缓冲。它通常用于显示错误消息和诊断信息,这些信息需要立即显示,以避免缓冲引起的延迟。

C++ 无缓冲标准错误流 (cerr) 示例

让我们看一个 C++ 中无缓冲标准错误流 (cerr) 的简单示例。

示例

编译并运行

输出

This is an error message.

说明

输出流 cerr 作为无缓冲错误消息流运行,它会立即显示输出而无需缓冲。程序使用 std::cerr << "This is an error message." 语句显示错误消息。

缓冲标准错误流 (clog)

clog 代表“标准日志”。它是一个缓冲流,类似于 cout。它通常用于写入不太紧急于错误的、信息性或诊断性的消息。当显示大量消息时,使用缓冲可以提高性能。

C++ 缓冲标准错误流

让我们看一个 C++ 中缓冲标准错误流 (cerr) 的实例。

示例

编译并运行

输出

This is an Tpointech message.

说明

clog 定义了一个用于日志记录和信息性消息的缓冲流。程序运行更有效率,同时减少了系统开销。程序使用标准 clog 流来显示信息性消息。

C++ 输入输出操作示例

让我们以一个例子来说明 C++ 中的输入/输出操作。

示例

编译并运行

输出

Hello, File I/O!

说明

该程序通过 ifstream 和 ofstream 的组合展示了如何读取和写入文件数据。getline 函数从文件内容中提取整行。

输入输出的特点

输入输出的几个特点如下:

  • 系统在输入和检索信息时执行类型检查,以维护正确的数据格式。
  • 输入输出系统提供格式化工具,以增强文档的可读性。
    • 运算符重载: 它简化了语法。
    • 错误处理: 它检测输入/输出操作中的错误。
    • 链式操作: 它允许在一个语句中进行多个操作。

结论

总之,C++ 中的 I/O 流为用户提供了强大的解决方案集,用于灵活且用户友好的输入和输出执行。对流以及格式化 I/O 和文件处理的全面理解是开发交互式和数据驱动的 C++ 应用程序所必需的。

C++ 基本输入输出选择题

1. 关于 C++ 中的 cin 对象,以下哪个说法是正确的?

  1. cin 只能读取整数值。
  2. cin 读取输入直到遇到空格。
  3. cin 可以读取包含空格的整个行。
  4. cin 读取整数时需要显式转换。
 

答案: b) cin 读取输入直到遇到空格。


2. 如果使用 cin 输入一个包含空格的字符串,会发生什么?

  1. 整个字符串都被存储,包括空格。
  2. 只存储空格之前的内容(第一个单词)。
  3. 程序崩溃。
  4. 存储输入之前会自动删除空格。
 

答案: b) 只存储空格之前的内容(第一个单词)。


3. 关于 C++ 输入输出操作,以下哪个说法是正确的?

  1. cin 操作是一个输出流,用于演示屏幕数据显示。
  2. 输出流 cout 从键盘输入中检索数据。
  3. iostream 库支持标准 I/O 操作。
  4. << 运算符用作用户输入的提取方式。
 

答案: c) iostream 库支持标准 I/O 操作。


4. C++ 中 iomanip 库的主要目的是什么?

  1. 提供高级数学运算
  2. 处理文件 I/O 操作
  3. 格式化输入和输出
  4. 处理内存管理
 

答案: c) 格式化输入和输出


5. 当我们在 C++ 中使用 endl 操纵器时会发生什么?

  1. 使用此命令时,程序执行会终止。
  2. 该操纵器将光标移到新行位置并立即清除输出缓冲区的内容。
  3. 它会清屏
  4. 它从用户那里读取输入
 

答案: b) 该操纵器将光标移到新行位置并立即清除输出缓冲区的内容。