C与C++输入输出流符号“《”和“》”的理解(傻瓜式解说)

2023-05-16

刚开始接触程序的同学,应该经常会写带有输入输出流符号“<<”和“>>”语句,很容易将"<<"和“>>”混淆,我讲一下自己的体会,或许会对新手有点帮助。

一、对 "<<"的理解

  • cout <<"i_am_cout";

此语句将在屏幕上打印出“i_am_cout”的字符串。

接下来拆分该语句,解释一下各部分的意思:

  •   cout :可以傻瓜似的理解为一个播音员,这个播音员可以是屏幕也可以是文件
  •    <<  :从左向右看,其形状渐变大,有扩散之意,可以想象为一个扩音的喇叭
  • “i_am_cout”  :一串字符

这几部分合起来的意思就是说,cout这个播音员要把一串字符播出到屏幕或者文件上。那么到底是输出到屏幕上还是文件上呢?就要看喇叭符号"<<"左边具体是什么了,在此示例中,"<<"左边是cout,即与屏幕有关。因此可以这样理解:屏幕要播音了,它准备将一串字符播出来。那么它播出来的结果是什么呢?想一想便知道,如果我们站在屏幕的角度,“播出一串字符”就意味着将一串字符挨个蹦到显示屏上显示。如果站在我们人的角度,就看到有一串字符显示在了显示器上。

 

再举一个例子:

ofstream fout( "E:\\mytest.txt" ); 

fout << "i_am_fout"<< endl; 

fout.close();//关闭文件输出流
  • ofstream:out file stream的缩写,指以文件输出流的方式打开文件,如果文件不存在,将会创建该文件。
  • fout: 输出流对象
  • << : 如上例,是扩音的喇叭
  • "i_am_fout": 一串字符

这几部分合起来的意思就是说,fout这个播音员要把一串字符播出到屏幕或者文件上。那么到底是输出到屏幕上还是文件上呢?就要看喇叭符号"<<"左边具体是什么了,在此示例中,"<<"左边是fout,fout是文件对象。因此可以这样理解:文件要播音了,它准备将一串字符播出来。那么它播出来的结果是什么呢?想一想便知道,如果我们站在文件的角度,“播出一串字符”就意味着将一串字符挨个蹦到文件上(mytest.txt)显示。如果站在我们人的角度,当我们打开mytest.txt这个文件,就看到有一串字符显示在了文件中。

 

 

 

 

二、对 ">>"的理解

string  i_am_cin;   
cin >> i_am_cin;

 此语句将把用户在屏幕上输入的字符串写入到变量“i_am_cin”中。

接下来拆分该语句,解释一下各部分的意思:

  •   cin :可以傻瓜似的理解为一个写入员,这写入员可以是屏幕也可以是文件
  •    >> :从左向右看,其形状渐变小,有压缩、收纳、汇合之意,仿佛百川''入"海,可以想象为一个将信息写入的写入员
  • “i_am_cin”  :一串字符

这几部分合起来的意思就是说,cin这个写入员要把一串字符写入到屏幕或者文件上。那么到底是写入到屏幕上还是文件上呢?就要看写入符号">>"左边具体是什么了,在此示例中,">>"左边是cout,即与屏幕有关。因此可以这样理解:屏幕要写入了,它准备将一串字符写进去,哪串字符呢?回答是用户输入到屏幕上的字符。那么它写入的结果是什么呢?想一想便知道,如果我们站在屏幕的角度,“写入一串字符”就意味着当用户在屏幕上输入了一串字符并点击回车后,屏幕要将一串字符的值写入到变量i_am_cin中存储起来。如果站在我们人的角度,并没有看到屏幕上出现字符串等的现象,但是实际上刚才输到屏幕上的字符串已经存到i_am_cin这个变量里了。

 

再举一个例子:

ifstream fin("E:\\mytest.txt" );   
string buffer;             
fin >> buffer;  
fin.close();  
  • ifstream:in file stream的缩写,指以文件输入流的方式打开文件。
  • fin: 输入流对象
  • >> : 如上例,是写入员
  • "i_am_fin": 一串字符

这几部分合起来的意思就是说,cin这个写入员要把一串字符写入到屏幕或者文件上。那么到底是写入到屏幕上还是文件上呢?就要看写入符号">>"左边具体是什么了,在此示例中,">>"左边是fin,即是文件流对象。因此可以这样理解:文件要写入了,它准备将一串字符写进去,哪串字符呢,回答是文件中已经存在的字符。那么它写入的结果是什么呢?想一想便知道,这里的写入是指将一串字符写入到buffer中。

TIP:如果按照这个例子,当mytest.txt中有多行内容时,会发现buffer只存储了第一行的内容(第一个空格前的内容)。如果想读取全部的内容,可以这样写:

ifstream fin("E:\\mytest.txt" );   
char buffer[80];             
fin.read(buffer,80);
fin.close();  

 

 

 

三、对 "输入","输出" 的理解

长短相形,高下相倾,a->b,如果站在a的角度是输出,如果站在b的角度是输入,所站的角度不同,结果便不同,因此平常在说输入输出流的时候,其实大家有一个默认的角度,如果不知道默认的角度,就会混淆,所以我们应该要明确默认的角度。

 可以这么考虑:从计算机的物理结构来看,内存处在机器内部,屏幕和文件处在外部;

从内部到外部叫做输出,仿佛罪犯由囚笼走出,不再聚囚笼内,因此叫“出”。

从外部到内部叫输入,仿佛刺从外部扎入人体,因此叫“入”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C与C++输入输出流符号“《”和“》”的理解(傻瓜式解说) 的相关文章

  • STL基础篇(适合初学者快速入门)

    1 STL 是什么 作为一个C 43 43 程序设计者 xff0c STL 是一种不可忽视的技术 Standard Template Library STL xff1a 标准模板库 更准确的说是 C 43 43 程序设计语言标准模板库 ST
  • golang 错误处理

    一 defer package main import 34 fmt 34 34 os 34 34 bufio 34 func tryDefer for i 61 0 i lt 100 i 43 43 defer fmt Println i
  • 平台式惯性导航系统简介(持续更新ing)

    惯性导航系统是利用惯性敏感器件 xff0c 通过基准方向 初始位置等信息来确定运载体位置 姿态和速度的自主式航位推算系统 平台式惯性导航系统是与捷联式惯性导航系统相对应的一种导航方式 目录 前言 一 前备知识 1 惯性导航常用坐标系 2 哥
  • C++ 标准模板库(STL)_iterator—— Traits(侯捷老师)

    iterator Traits Traits1 产生背景2 定义2 1 iterator traits中定义的class iterators2 1 iterator traits中定义的non class iterators 3 内嵌类型声
  • C++ 标准模板库(STL)_序列式容器——Vector以及扩容操作(侯捷老师)

    STL Vector容器 Vector1 定义2 数据结构3 vector成倍扩容过程及部分源码3 1 扩容条件3 2 扩容步骤 xff08 3步 xff09 3 3 扩容操作部分源码 insert aux push back 43 ins
  • C++ 标准模板库(STL)_序列式容器—— deque(模拟连续空间)(侯捷老师)

    STL deque 双端队列 deque1 定义2 特点3 deque节点结构 数据组织形式 xff09 4 deque数据结构部分源码定义5 初始化map部分源码6 deque iterator 源码定义6 1 迭代器失效问题 7 pus
  • 常见数据结构——完全二叉树(定义、特征、节点个数的判断以及C++简单实现)

    完全二叉树 完全二叉树1 定义2 特征3 C 43 43 简单实现完全二叉树的节点个数 完全二叉树 1 定义 完全二叉树是由满二叉树而引出来的 xff0c 若设二叉树的深度为h xff0c 除第 h 层外 xff0c 其它各层 1 xff5
  • 什么是状态机(Finite-state machine)?

    有限状态机 有限状态机 FSM 1 什么是 状态 2 什么是状态机 xff1f 3 状态机图怎么画 xff1f 参考 有限状态机 FSM 1 什么是 状态 先来解释什么是 状态 xff08 State xff09 现实事物是有不同状态的 x
  • C++实现生产者和消费者模型

    C 43 43 实现生产者和消费者模型 C 43 43 实现生产者和消费者模型1 实现细节2 单生产者 单消费者模型3 单生产者 多消费者模型4 多生产者 单消费者模型5 多生产者 多消费者模型 参考 C 43 43 实现生产者和消费者模型
  • 计算机网络——网络字节序(大端字节序(Big Endian)\小端字节序(Little Endian))

    网络字节序 网络字节序1 网络字节序 Network Byte Order 和本机转换2 字节序转换函数 网络字节序 1 网络字节序 Network Byte Order 和本机转换 1 大端 小端字节序 大端 和 小端 表示多字节值的哪一
  • Android:OkHttp的理解和使用

    OkHttp的理解和使用 OkHttp1 什么是OkHttp2 OkHttp的作用3 Okhttp的基本使用3 1 Http请求和响应的组成3 2 OkHttp请求和响应的组成3 3 GET请求同步方法3 4 GET请求异步方法3 5 po
  • 岛屿之灵攻略笔记

    游戏自定义所在地图名字 xff0c 我的名字是Academics 移动 按下Shift可以跑步 xff0c 再按shift切换回走路 困意满的话 xff0c 跑步和骑自行车都不行 Basic Stove分析 图标 需要 Cooking等级
  • Android : 编写精美的聊天界面

    Android 编写精美的聊天界面 1 准备工作2 编写精美的聊天界面参考 1 准备工作 首先制作一张 9 格式的聊天气泡 xff1b 需要注意的是 xff0c 制作完成后 xff0c 应该将原始文件删除 xff0c 否则AS会分不清楚而报
  • Android:ThreadLocal的简单理解和使用

    ThreadLocal的简单理解和使用 1 背景1 1 背景及问题1 2 每个线程需要一个独享的对象1 2 每个线程需要一个独享的对象 2 ThreadLocal原理2 1 使用说明2 2 ThreadLocal的set方法2 3 Thre
  • Android:IdleHandler的简单理解和使用

    IdleHandler的简单理解和使用 1 IdleHandler 是什么2 IdleHandler 使用方式2 1 添加和删除2 2 执行 3 常见问题和使用场景3 1 使用场景3 2 常见问题 参考 1 IdleHandler 是什么
  • Android:LeakCanary原理的简单理解和使用

    LeakCanary原理的简单理解和使用 1 背景2 LeakCanary2 1 LeakCanary 工作原理2 1 1 检测未被 GC 回收的对象2 1 2 转储堆2 1 3 分析堆2 1 4 对泄漏进行分类 2 2 LeakCanar
  • 【opencv-c++】cv::filter2D图像卷积操作

    opencv c cv filter2D图像卷积操作 1 背景 2 示例 1 背景 图像卷积的示意图如下 以上操作描述为 一个窗口区域在另外一个大的图像上移动 对每个窗口覆盖的区域都进行点乘得到的值作为中心像素点的输出值 窗口的移动顺序是是
  • 【opencv-c++】cv::GaussianBlur高斯滤波

    opencv c cv GaussianBlur高斯滤波 1 背景 2 示例 1 背景 高斯滤波首先要知道高斯函数 在图像采集的过程中 经常会有噪声出现 这些噪声满足高斯分布 我们简称为高斯噪声 对于高斯噪声 我们采用高斯滤波来去噪 高斯滤
  • 【opencv-c++】cv::bilateralFilter双边滤波

    opencv c cv bilateralFilter双边滤波 1 背景 2 示例 1 背景 由于高斯滤波去降噪 会较明显地模糊边缘 对于高频细节的保护效果并不明显 而双边滤波 Bilateral filter 是一种非线性的滤波方法 是结
  • 【深度学习】模型过拟合的原因以及解决办法

    深度学习 模型过拟合的原因以及解决办法 1 背景2 模型拟合3 简述原因4 欠拟合解决办法5 过拟合解决办法 1 背景 所谓模型过拟合现象 xff1a 在训练网络模型的时候 xff0c 会发现模型在训练集上表现很好 xff0c 但是在测试集

随机推荐