C++ 基本输入/输出:Cout、Cin、Cerr 示例
C++ 中的流是什么?
C++ 为用户提供了许多可以用于执行输入/输出任务的库。这些任务以字节序列的形式完成,俗称流。
流分为两种
流的类型
- 输入流: 这是一种流,其中字节从键盘等设备流向主内存。
- 输出流: 这是一种流,其中字节反向流动,即从主内存流向显示屏等设备。
流如何工作?
C++ 流的工作方式如下:
- 首先,用正确的类型初始化流。
- 接下来,您应该使用 get/put 指针指定 I/O 将发生在哪里。
- 在流中到达正确位置后,您可以使用分别为 >> 和 << 运算符执行输入和输出任务。
函数表
以下是 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; }
输出
这是代码的屏幕截图:
代码解释
- 包含定义了 cout 对象的 iostream 头文件。
- 包含 std 命名空间,这样在使用其类时就不必调用它。
- 调用 main() 函数。程序代码应添加在其主体内。左花括号 { 标记其主体的开始。
- 创建一个名为 welcome 的字符变量,用于保存字符串“Welcome to Guru99”。
- 在控制台打印字符串 welcome 的值。endl 是一个 C++ 关键字,表示换行。它将光标移动到下一行开始打印文本。
- 程序在成功执行后必须返回值。
- 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; }
输出
这是代码的屏幕截图:
代码解释
- 将 iostream 头文件包含到我们的程序中。cin 对象定义在此头文件中。
- 包含 std 命名空间以使用其类。在使用其类时,您不必调用 std。
- 调用 main() 函数。程序代码应添加在其主体内。
- 程序主体的开始。
- 声明一个 整型变量 名为 number。
- 在屏幕上打印一条消息,提示用户输入一个数字。
- 从键盘读取用户在控制台中输入的值。
- 在控制台上打印上面读取的值以及其他文本。
- 如果程序成功执行,则应返回值。
- main 函数主体的结束。
std::cerr
cerr 对象构成了 C++ 中输出错误的标准错误流。Cerr 是 ostream 类的实例。cerr 对象是无缓冲的。这意味着当需要立即显示错误消息时使用它。
由于它是无缓冲的,因此它不会存储错误消息以供稍后显示。它与流插入运算符 (<<) 一起使用。
示例
#include <iostream> using namespace std; int main() { cerr << "An Error occurred!"; return 0; }
输出
这是代码的屏幕截图:
代码解释
- 包含定义了 cerr 对象的 iostream 头文件。
- 包含 std 命名空间,这样在使用其类时就不必调用它。
- 调用 main() 函数。程序逻辑应添加在其主体内。左花括号标记函数主体的开始。
- 使用 cerr 对象在控制台上打印错误。
- 程序在成功执行后必须返回值。
- main 函数主体的结束。
std::clog
clog 对象是 ostream 类的实例。它用于在标准显示器(监视器)上显示错误。它类似于 cerr 对象,但它是缓冲的。由于它是缓冲的,它会将错误消息存储在缓冲区中,直到缓冲区已满/刷新。它与流插入运算符 (<<) 一起使用。
示例
#include <iostream> using namespace std; int main() { clog << "An Error occurred!"; return 0; }
输出
这是代码的屏幕截图:
代码解释
- 包含定义了 clog 对象的 iostream 头文件。
- 包含 std 命名空间,以便我们可以在不调用它的情况下使用其类。
- 调用 main() 函数。程序逻辑应添加在其主体内。{ 标记函数主体的开始。
- 使用 clog 对象在标准输出(监视器)上打印错误。
- 程序在成功完成后必须返回值。
- 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 对象则不缓冲。