C++ 基本输入/输出:Cout、Cin、Cerr 示例

⚡ 智能摘要

C++ 输入和输出操作依赖于流对象,这些对象以字节序列的形式在程序和设备之间移动数据,其中 cin 读取键盘输入,cout、cerr 和 clog 将输出写入屏幕。

  • 🔘 流: 输入和输出任务以称为流的字节序列的形式传输,在主内存和设备之间移动数据。
  • 📥 头文件: iostream、iomanip 和 fstream 库定义了用于基本输入和输出的对象和操作器。
  • 🖨️ cout 和 cin: cout 对象使用插入运算符打印值,而 cin 对象使用 ex 运算符读取值。traction 运算符。
  • ⚠️ cerr 和堵塞: 两者都会报告错误,但 cerr 会保持未缓冲状态以立即显示,而 clog 会先缓冲消息。
  • 🛠️ 错误处理: 好的、坏的、失败的和 eof 检查会读取流状态,因此可以安全地捕获失败的操作。
  • 🤖 人工智能辅助: GitHub Copilot 等 AI 编码助手可以根据简短的注释或函数名生成 cin 和 cout 样板代码。

C++ 基本输入输出

什么是 Stream C++?

C++ 为用户提供了许多可用于执行输入/输出任务的库。这些任务以字节序列(通常称为流)的形式完成。

这些流分为两部分:

流的类型

  • 输入流: 这是一种流类型,其中字节从键盘等设备流向主存储器。
  • 输出流: 这是一种字节以相反方向流动的流类型,即从主存储器流向显示屏等设备。

流如何工作?

C++ 流的工作原理如下:

  1. 首先,用正确的类型初始化流。
  2. 接下来,您应该使用 get/put 指针指定 I/O 将发生的位置。
  3. 到达流中的正确位置后,您可以分别使用 >> 和 << 运算符执行输入和输出任务。

功能表

以下是stream.h头文件中提供的函数:

增益级功能
文件缓冲区它将文件缓冲区设置为读/写。它包含 close() 和 open() 函数
流库它是 ifstream、fstream 和 ofstream 类的基类。其操作与文件流相同。
流式传输它是一个用于提供输入操作的输入文件流类。
流外它是一个输出文件流类,用于提供输出操作。
它是一个输入/输出流类。它支持同时进行输入/输出操作。

C++ 输入/输出的头文件

C++ 提供了三个带有执行基本输入/输出任务函数的库。它们包括:

  • IO流: 它是标准输入/输出流的缩写。此头文件附带了 cin/cout/cerr 等对象的定义。
  • 约曼尼普: 它是输入/输出操纵器的缩写。该库附带可用于操纵流的函数。它包含 setw、setprecision 等对象的定义。
  • 流: 这是描述文件流的头文件。它处理从文件读取的数据作为输入或写入文件的数据作为输出。

cin 和 cout 关键字在 C++。它们分别用于获取输入和打印输出。要使用它们,您必须在程序中包含 iostream 头文件。原因是它们是在该头文件中定义的。未包含 iostream 头文件将生成错误。这是由于 C++ 编译器理解关键字的含义。

iostream 头文件中定义的主要对象是 cin、cout、cerr 和 clog。让我们讨论一下它们。

标准::cout

cout 对象是 iostream 类的一个实例。它用于在标准输出设备(通常是屏幕)上生成输出。它与流插入运算符 (<<) 一起使用。

例如:

#include <iostream>
using namespace std;
int main() {

	char welcome[] = "Welcome to Guru99";

	cout << welcome << endl;

	return 0;
}

输出:

标准::cout

以下是代码截图:

标准::cout

Code 说明:

  1. 包含定义 cout 对象的 iostream 头文件。
  2. 包含 std 命名空间,以便我们在使用它的类时不必调用它。
  3. 调用 main() 函数。程序代码应添加在其主体内。左花括号 { 标记其主体的开始。
  4. 创建一个名为 welcome 的字符变量,用于存储字符串“Welcome to”。 Guru99.
  5. 在控制台上打印字符串 welcome 的值。endl 是 C++ 关键字,表示结束行。它将光标移动到下一行开始打印文本。
  6. 程序执行成功后必须返回值。
  7. 函数 main() 主体结束。

std::cin

cin 对象是 istream 类的一个实例。它从输入设备(键盘)读取输入。它通常与 ex 一起使用。trac运算符 (>>)。例如traction 对象负责 extrac从 cin 对象通过键盘输入 ting 数据。

例如:

以下示例演示了如何在 C++:

#include <iostream>
using namespace std;
int main()
{
	int number;

	cout << "Enter a number:";
	cin >> number;
	cout << "\nYou entered: " << number;

	return 0;
}

输出:

std::cin

以下是代码截图:

std::cin

Code 说明:

  1. 将 iostream 头文件包含到我们的程序中。cin 对象在此头文件中定义。
  2. 包含 std 命名空间以使用其类。使用其类时无需调用 std。
  3. 调用main()函数。程序代码应添加到其主体内。
  4. 程序主体的开始。
  5. 声明 整型变量 命名的数字。
  6. 在屏幕上打印一条消息,提示用户输入一个数字。
  7. 从键盘读取用户在控制台上输入的值。
  8. 将上面读取的值与其他文本一起打印在控制台上。
  9. 如果程序执行成功,它应该返回一个值。
  10. 主函数主体结束。

std::cerr

cerr 对象构成标准错误流,用于输出 C++。cerr 是 ostream 类的一个实例。cerr 对象是非缓冲的。这意味着它用于需要立即显示错误消息的情况。

由于它是非缓冲的,因此它不会存储错误消息以供稍后显示。它与流插入运算符 (<<) 一起使用。

例如:

#include <iostream>
using namespace std;
int main() {

	cerr << "An Error occurred!";

	return 0;
}

输出:

std::cerr

以下是代码截图:

std::cerr

Code 说明:

  1. 包含已定义 cerr 对象的 iostream 头文件。
  2. 包含 std 命名空间,以便我们在使用它的类时不必调用它。
  3. 调用 main() 函数。程序逻辑应添加在其主体内。左花括号标记函数主体的开始。
  4. 使用 cerr 对象在控制台上打印错误。
  5. 程序执行成功后必须返回一个值。
  6. 主函数主体结束。

性病::堵塞

clog 对象是 ostream 类的一个实例。它用于在标准显示器(监视器)上显示错误。它类似于 cerr 对象,但它是缓冲的。由于它是缓冲的,因此它将错误消息存储在缓冲区中,直到缓冲区被填满/刷新。它与流插入运算符 (<<) 一起使用。

例如:

#include <iostream>
using namespace std;
int main() {
	clog << "An Error occurred!";
	return 0;
}

输出:

性病::堵塞

以下是代码截图:

性病::堵塞

Code 说明:

  1. 包括定义clog对象的iostream头文件。
  2. 包括 std 命名空间,以便我们可以使用它的类而无需调用它。
  3. 调用 main() 函数。程序逻辑应添加在其主体内。{ 标记函数主体的开始。
  4. 使用 clog 对象在标准输出(即监视器)上打印错误。
  5. 程序成功完成后必须返回一个值。
  6. 函数main()函数体的结束。

使用 IO 流进行错误处理

相同的流对象还会报告操作是否成功,这是通过流状态检查来揭示的。

要检查流是否有效,可以将其用作布尔值。

这是一个例子:

ifstream file( "myfile.txt" );
if ( ! file )
{
        cout << "File NOT opened!" << endl;
}

要获取有关流状态的更多详细信息,您可以使用以下函数:

  • good()-如果一切正常将返回 true。
  • bad()-如果发生致命错误将返回 true。
  • fail()-流操作失败后将返回 true。
  • eof()-如果到达文件末尾将返回 true。

要了解特定的读/写操作是否失败,请测试读取结果。

例如,要检查用户是否输入了有效的整数,请执行以下操作:

int p;
if ( cin >> p ) 
{
        cout << "Enter valid number" << endl;
}

常见问题

cout 对象是类型安全的,并且使用插入运算符,因此它可以自动检测每个值的类型。C 语言的 printf 函数依赖于格式说明符(例如 %d),这些说明符必须手动与参数匹配。

前traction 运算符会在第一个空格处停止,因此 cin 每次只读取一个单词。要读取包含空格的整行,请调用 getline(cin, variable),它会读取到换行符为止。

两者都会另起一行,但 `endl` 每次都会清空输出缓冲区,这可能会减慢繁忙循环的速度。建议只使用普通的换行符,并将 `endl` 保留到必须立即清空缓冲区的情况。

cin、cout、cerr 和 clog 对象位于 std 命名空间中。使用 using namespace std 可以让你直接输入 cout 而不是 std::cout。大型项目通常会保留显式的 std 前缀以避免冲突。

包含 iomanip 标头并使用 cout 的操纵符。setw 操纵符用于预留字段宽度,setprecision 操纵符用于设置显示的位数,格式化数字和列,而不会更改存储的值。

是的。因为 cout 和 cerr 是独立的流,所以 shell 可以将正常输出重定向到文件,而错误信息仍然会显示在屏幕上。在代码中,rdbuf 可以将一个流指向另一个缓冲区。

是的。AI 编码助手会读取注释或函数名,并生成 cin 和 cout 语句,以及 iostream 包含语句和格式化的提示符。 Rev查看生成的流逻辑以应对极端情况仍然是明智之举。

是的。 GitHub 副驾驶 输入时自动完成 cout 格式化、cin 验证循环和 cerr 错误检查。这是 2026 年的版本。 C++ 代码智能增加了语义符号感知能力,因此多文件建议保持一致。

总结一下这篇文章: