【C++掌中宝】玩转C++标准输入输出(简洁明了)

时间:2024-09-29 18:45:23

在这里插入图片描述

文章目录

  • 前言
  • 1. I/O库头文件
  • 2. C++的标准输入输出——\
  • 3. 基本用法
    • 3.1 标准输出流(cout)
    • 3.2 标准输入流(cin)
    • 3.3 标准错误流(cerr)
    • 3.4 标准日志流(clog)
  • 4. 内容补充
  • 结语

前言

C++ 标准库提供了一组丰富的输入/输出功能,本章将讨论 C++ 编程中最基本和最常见的 I/O 操作——C++的标准输入输出。

C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作

1. I/O库头文件

下列的头文件在 C++ 编程中很重要。

头文件 函数和描述
<iostream> 该文件定义了 cin、cout、cerrclog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。
<iomanip> 该文件通过所谓的参数化的流操纵器(比如 setwsetprecision),来声明对执行标准化 I/O 有用的服务。
<fstream> 该文件为用户控制的文件处理声明服务。

2. C++的标准输入输出——<iostream>

<iostream> 是 Input Output Stream 的缩写,是标准的输入、输出流库, 定义了几个常用的流类和操作符,允许程序与标准输入输出设备(如键盘和屏幕)进行交互。

以下是<iostream>库的详细使用说明,包括其主要类和常见用法示例。

主要类

  • std::istream:用于输入操作的抽象基类。
  • std::ostream:用于输出操作的抽象基类。
  • std::iostream:继承自std::istreamstd::ostream,用于同时进行输入和输出操作。
  • std::cin:是 istream 类的对象,它是主要面向窄字符(narrow characters (of type char))的标准输入流对象,通常与键盘关联。
  • std::cout:是 ostream 类的对象,它是主要面向窄字符的标准输出流对象,通常与屏幕关联。
  • std::endl: 是 ostream 类的一个函数模板。它不仅仅是一个换行符,还会刷新输出缓冲区。使用 std::endl 可以在输出流中插入一个换行符,并且强制将缓冲区中的内容刷新到目标设备(例如显示器)。这在需要确保输出内容及时显示的情况下特别有用。
  • std::cerr:标准错误输出流对象,是 iostream 类的一个实例,不带缓冲,且每个流插入到 cerr 都会立即输出。通常与屏幕关联。
  • std::clog:标准日志流对象,是 iostream 类的一个实例,带缓冲,通常与屏幕关联。

常用操作符

  • >>:输入(流提取)操作符,从输入流读取数据。
  • <<:输出(流插入)操作符,将数据写入输出流。

(C语言还用这两个运算符做位运算右移/左移)

3. 基本用法

3.1 标准输出流(cout)

预定义的对象 coutiostream 类的一个实例。cout 对象"连接"到标准输出设备,通常是显示屏。

cout 是与流插入运算符 << 结合使用的,如下所示:

#include <iostream>

using namespace std;

int main()
{
	char str[] = "Hello C++";

	cout << "Value of str is : " << str << endl;
}

当上面的代码被编译和执行时,它会产生下列结果:

Value of str is : Hello C++

????注意

C++ 编译器根据要输出变量的数据类型,选择合适的流插入运算符来显示值。<< 运算符被重载来输出内置类型(整型、浮点型、double 型、字符串和指针)的数据项。

流插入运算符 << 在一个语句中可以多次使用,如上面实例中所示,endl 用于在行末添加一个换行符。

3.2 标准输入流(cin)

预定义的对象 ciniostream 类的一个实例。cin 对象附属到标准输入设备,通常是键盘。

cin 是与流提取运算符 >> 结合使用的,如下所示:

#include <iostream>
 
using namespace std;
 
int main( )
{
   char name[50];
 
   cout << "请输入您的名称: ";
   cin >> name;
   cout << "您的名称是: " << name << endl;
 
}

当上面的代码被编译和执行时,它会提示用户输入名称。当用户输入一个值,并按回车键,就会看到下列结果:

请输入您的名称: cplusplus
您的名称是: cplusplus

????注意

C++ 编译器根据要输入值的数据类型,选择合适的流提取运算符来提取值,并把它存储在给定的变量中。

流提取运算符 >> 在一个语句中可以多次使用,如果要求输入多个数据,可以使用如下语句:

cin >> name >> age;

这相当于下面两个语句:

cin >> name;
cin >> age;

3.3 标准错误流(cerr)

预定义的对象 cerriostream 类的一个实例。cerr 对象附属到标准输出设备,通常也是显示屏,但是 cerr 对象是非缓冲的,且每个流插入到 cerr 都会立即输出。

cerr 也是与流插入运算符 << 结合使用的,如下所示:

#include <iostream>
 
using namespace std;
 
int main( )
{
   char str[] = "Unable to read....";
 
   cerr << "Error message : " << str << endl;
}

当上面的代码被编译和执行时,它会产生下列结果:

Error message : Unable to read....

3.4 标准日志流(clog)

预定义的对象 clogiostream 类的一个实例。clog 对象附属到标准输出设备,通常也是显示屏,但是 clog 对象是缓冲的。这意味着每个流插入到 clog 都会先存储在缓冲区,直到缓冲填满或者缓冲区刷新时才会输出。

clog 也是与流插入运算符 << 结合使用的,如下所示:

#include <iostream>
 
using namespace std;
 
int main( )
{
   char str[] = "Unable to read....";
 
   clog << "Error message : " << str << endl;
}

当上面的代码被编译和执行时,它会产生下列结果:

Error message : Unable to read....

????注意

通过这些小实例,我们无法区分 cout、cerr 和 clog 的差异,但在编写和执行大型程序时,它们之间的差异就变得非常明显。所以良好的编程实践告诉我们,使用 cerr 流来显示错误消息,而其他的日志消息则使用 clog 流来输出。

4. 内容补充

  • 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动指定格式,C++的输入输出可以自动识别变量类型(本质是通过函数重载实现的),其实最重要的是C++的流能更好的支持自定义类型对象的输入输出。

  • IO流涉及类和对象,运算符重载、继承等很多面向对象的知识,这些知识我们还没有讲解,所以这里我们只能简单认识一下C++ IO流的用法,后面我们会有专门的一个章节来细节IO流库。

  • cout/cin/endl等都属于C++标准库,C++标准库都放在⼀个叫std(standard)的命名空间中,所以要通过命名空间的使用方式去用他们。

  • 一般日常练习中我们可以using namespace std,实际项目开发中不建议using namespace std。

  • 这里我们没有包含<stdio.h>,也可以使用printf和scanf,在包含<iostream>间接包含了。vs系列编译器是这样的,但是其他编译器可能会报错。

结语

今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下。

也可以点点关注,避免以后找不到我哦!

Crossoads主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是作者前进的动力!

在这里插入图片描述

参考:C++ 基本的输入输出 | (runoob.com)