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

什么是 Stream C++?

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

这些流分为两部分:

流的类型

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

流如何工作?

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

  1. 首先,用正确的类型初始化流。
  2. 接下来你应该说明 I / O 将使用 get/put 指针发生。
  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

代码说明:

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

std::cin

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

例如:

以下示例演示了如何在 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

代码说明:

  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

代码说明:

  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;
}

输出:

性病::堵塞

以下是代码截图:

性病::堵塞

代码说明:

  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;
}

结语

  • 输入和输出任务 C++ 通过字节序列进行。字节被称为流。
  • 在输入流中,字节从输入设备(如键盘)流向主存储器。
  • 在输出流中,来自主内存的字节然后传输到显示器等输出设备。
  • cin 对象是 istream 类的一个实例。它从键盘等输入设备读取输入。
  • cout 对象是 ostream 类的一个实例。它在显示器等输出设备上产生输出。
  • cerr 对象是 ostream 类的一个实例。它在监视器上显示错误对象。
  • clog 对象是 ostream 类的实例。它在输出设备上显示错误消息。
  • clog 对象缓冲错误消息,而 cerr 对象则不缓冲。