当前位置: 首页 > news >正文

C++的基本的输入输出流学习

C++的基本的输入输出流学习

前言:我相信许多人是学习了C语言之后才来学习的C++,而且输入输出流也是大多数的学习C++的开始部分,但是C++的输入输出流函数与C语言的不太相同,接下来我就给大家介绍一下,作者的的知识有限,也是想借着写文章这个方式梳理一下自己所学的知识,同时尽可能的帮助一下一些学习C++的小白们,如有讲错,请各位大佬纠正!


一、什么是输入输出(IO)流?

相信学习过了C或或者其它语言的同学们对IO流都不陌生,所谓的流(Stream)是比较专业的术语,我们可以粗略的把它理解为一条数据小溪,里面有着各种数据,就拿C语言的scanf、printf来说,当计算器监听键盘的输入,或者向屏幕输出数据时,相当于向这条小溪加入、拿走东西。

在这里插入图片描述


二、C++中的输入与输出

在Java、Python语言中都有着内置的输入输出语句,但是C++与C与语言一样是没有内置的输入输出语句的,C语言在stdio.h库中有着printf、scanf等输入输出语句,而C++包含了一个全面的标准库来提供IO流机制,也就是我们常用的iostream

在这里插入图片描述

在iostream - C++ Reference网址中,我们可以知道iostream下有着两个基础类型istream(输入流)、ostream(输出流),而在iostream中定义有四个IO对象:cin(istream 标准输入流)、cout(ostream 标准输出流)、cerr、clog,这里我们着重讲的就是cin、cout这两个IO流对象。


三、cout(标准输出流)

cout定义在std命名空间中的全局标准输出流对象,它可以可以将数据输出在标准输出(通常是屏幕)中,与C语言的printf相似。概念讲太多,人容易犯困,下面我们通过代码举例学习使用(这里我就使用VS2022)

#include <iostream>int main() {int x = 1;double y = 2.5;char z = 'A';//C语言的输出语句printf("x:%d\n", x);printf("y:%.1f\n", y);printf("z:%c\n", z);printf("----------------------------------------\n");//C++的输出语句std::cout << "x:" << x << std::endl;std::cout << "y:" << y << std::endl;std::cout << "z:" << z << std::endl;return 0;
}

在这里插入图片描述

上面我们使用了两种代码(C\C++)来实现对int类型 x,double类型 y,char类型 z 进行了输出,同时根据代码我们会发现coutprintf输出的方式有很大的不同,cout的输出方式可以看作为 std::cout << 数据显得十分的简单,假设我需要输出字符串,我们可以这样子写:

std::cout << "Hello World!";

cout的一些使用知识:

1. 自动识别输出类型:

在上面的代码中,如果我仔细观察我们可以发现,C的printf输出数据时,我需要自己定义输出格式,如:输出整形需要定义"%d",但是对于C++中的cout来说,我们只需要把我们的变量扔给cout,它就能够直接输出,这是cout与printf不同的地方之一!

2.可连续输出

在C语言中,如果我们需要将x、y、z合在一起输出,我们需要这样写:

printf("x:%d y:%.1lf z:%c\n", x, y, z);

同样的,在我们的cout中,我们也可以是实现这样的输出

std::cout << "x:" << x << " y:" << y << " z:" << z << std::endl;

cout 各个数据输入之间需要用 << 操作符连接起来。

3.无法很好的对小数输出位数的控制

在C语言中,我们可以自由地控制我们浮点数的小数的输出位数比,如:

double Pi = 3.14159;
printf("%.1lf\n", Pi);//保留一位小数
printf("%.2lf\n", Pi);//保留两位小数

但是在C++中的cout,我们只能这么写:

std::cout << Pi << std::endl;

在这里插入图片描述

所以cout一般无法自己左右小数输出的位数,那么,有没有办法解决这种问题呢?我们可以通过 iomanip 库 来控制我们的输出格式,但是我们在这就不多讲了!

(选看) cout自动识别输出类型的原因我们可以简略的看一下上面提过的网站中的ostream的描述。

在这里插入图片描述

这涉及了运算符的重载函数重载,ostream类中通过对函数重载,让不同的类型进入了不同的函数,也就实现了函数对内置类型(int、double、float)的自动识别。

连续输出的解释:

我们可以观察到,`<<` 运算符的重载函数返回值是 `ofstream&` 这是一个输出流对象的引用,其实就是我们的cout,其输出的样式应该是这样的:

在这里插入图片描述


四、cin(标准输入流)

cin定义在std命名空间中的全局标准输入流对象,它可以读取标准输入(通常是键盘)的数据,并且把这些内容存储到我们定义的变量中,下面我们依旧结合着代码进行学习使用。

#include <iostream>int main() {int c_x, cpp_x;double c_y, cpp_y;char c_z, cpp_z;std::cout << "scanf输入:" << std::endl;scanf("%d %lf %c", &c_x, &c_y, &c_z);printf("c_x:%d c_y:%lf c_z:%c\n", c_x, c_y, c_z);std::cout << "cin输入:" << std::endl;std::cin >> cpp_x >> cpp_y >> cpp_z;std::cout << "cpp_x:" << cpp_x << " " << "cpp_y:" << cpp_y <<" " << "cpp_z:" << cpp_z << std::endl;return 0;
}

在这里插入图片描述

所以我们可以知道 cin 的用法与 cout 的用法是十分相似的只是符号有所不同,cin 的用法是 cin >> 变量名 ,我们也可以发现,cin 与 cout 一样,不需要我们像C语言那样设置输入输出的格式,cin 会自动识别变量的类型,而且用的符号是 >> 与 cout 的 << 是相反的。

(选看) cin自动识别变量类型的原因我们可以简略的看一下上面提过的网站中的istream的描述。
在这里插入图片描述

同样的我们发现,istream<<运算符进行了重载,而且还有函数的重载,所以,才能识别不同变量的类型,对其准确的输入。

cin的输入的流程与cout的输出流程是一样的,同时也可以观察到>>运算符的返回值是 istream& 我们可以通过画图解释


End

对于cout 与 cin 这个C++的大门我们就介绍到这里!作者的知识也比较有限,所以篇幅也比较少,如果有写错的地方有请各位大佬指正!也希望我的文章对大家有所帮助!

相关文章:

  • 【CODESYS学习笔记001】MODBUS-TCP 与 标准TCP通信的优缺点对比
  • Diffusion Models for Imperceptible and TransferableAdversarial Attack--阅读笔记
  • 国内网络设备厂商名单(List of Domestic Network Equipment Manufacturers)
  • Java面试(2025)—— Spring
  • Git创建分支操作指南
  • 【网工第6版】第3章 局域网①
  • Gparted重新分配swap空间之后,linux电脑读不到swap空间
  • 为什么要外参标定?
  • 网络编程 - 1
  • linux——iptables防火墙
  • 考研系列-计算机网络-第一章、计算机网络体系结构
  • OPAL:机器人学习中编码物理系统的因果理解
  • 如何自学机器学习?零基础到实战的完整路径
  • 如何对Flutter应用程序进行单元测试
  • 【软件工程大系】基于构件的软件工程(CBSE)
  • 【cocos creator 3.x】cocos creator2.x项目升级3.x项目改动点
  • genhtml 工具使用说明
  • 何时选择for,何时使用while?
  • 进行性核上性麻痹:合理饮食,提升生活质量
  • 【天梯赛练习】L2-035 完全二叉树的层序遍历
  • 阿坝州委书记徐芝文已任四川省政府党组成员
  • 牟海松任国家信访局副局长
  • 中美发布日内瓦经贸会谈联合声明达成关税共识,外交部回应
  • 国务院新闻办公室发布《新时代的中国国家安全》白皮书
  • 重庆一高校75万采购市价299元产品?工作人员:正在处理
  • 《瞭望》周刊社原总编辑、党委书记姬斌逝世,享年67岁