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

C++ 中的流是什么?

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

流分为两种

流的类型

  • 输入流: 这是一种流,其中字节从键盘等设备流向主内存。
  • 输出流: 这是一种流,其中字节反向流动,即从主内存流向显示屏等设备。

流如何工作?

C++ 流的工作方式如下:

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

函数表

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

函数
Filebuf 它设置用于读/写的文​​件缓冲区。它包含 close() 和 open() 函数。
fstreambase 它是 ifstream、fstream 和 ofstream 类的基类。它的操作对文件流是通用的。
ifstream 它是一个输入文件流类,用于提供输入操作。
ofstream 它是一个输出文件流类,用于提供输出操作。
fstream 它是一个输入/输出流类。它支持同时的输入/输出操作。

C++ 输入/输出头文件

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

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

cin 和 cout 关键字在 C++ 中非常流行。它们分别用于接收输入和打印输出。要使用它们,您必须在程序中包含 iostream 头文件。原因是它们在该头文件中定义。未能包含 iostream 头文件将导致错误。这是因为 C++ 编译器无法理解关键字的含义。

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

std::cout

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

示例

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

	char welcome[] = "Welcome to Guru99";

	cout << welcome << endl;

	return 0;
}

输出

std::cout

这是代码的屏幕截图:

std::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++ 中使用 cin 关键字。

#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. 声明一个 整型变量 名为 number。
  6. 在屏幕上打印一条消息,提示用户输入一个数字。
  7. 从键盘读取用户在控制台中输入的值。
  8. 在控制台上打印上面读取的值以及其他文本。
  9. 如果程序成功执行,则应返回值。
  10. main 函数主体的结束。

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. main 函数主体的结束。

std::clog

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

示例

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

输出

std::clog

这是代码的屏幕截图:

std::clog

代码解释

  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 对象则不缓冲。