带你了解C++的IO流

目录
  • 一、C语言的输入与输出
  • 二、C++中流的概念
  • 三、C++IO流
    • 1.C++标准IO流
    • 2. C++文件IO流
  • 四、stringstream
  • 总结

一、C语言的输入与输出

C语言中我们最长用到的输入输出方式就是scanf ()与printf()。

scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。

printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。

C语言借助了相应的缓冲区来进行输入与输出。如下图所示:

其中,输入输出缓冲区的作用:可以屏蔽掉低级I/O的实现,低级I/O的实现依赖操作系统本身内核的实现,所以如果能够屏蔽这部分的差异,可以很容易写出可移植的程序。

可以使用这部分的内容实现“行”读取的行为,对于计算机而言是没有“行”这个概念,就可以定义“行”的概念,然后解析缓冲区的内容,返回一个“行”。

二、C++中流的概念

C++中的流是对一种有序连续且具有方向性的数据的抽象描述。

C++流是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输出设备(显示器)输出的过程。

特点是:有序连续、具有方向性。

为了实现这种流动,C++定义了I/O标准类库,这些每个类都称为流/流类。

三、C++IO流

C++系统实现了一个庞大的类库,其中ios为基类,其他类都是直接或间接派生自ios类

1.C++标准IO流

C++标准库提供了4个全局流对象cin、cout、cerr、clog。

cout进行标准输出,即数据从内存流向控制台(显示器)。

cin进行标准输入即数据通过键盘输入到程序中。

cerr用来进行标准错误的输出。

clog进行日志的输出,

从上图可以看出,cout、cerr、clog是ostream类的三个不同的对象,因此这三个对象现在基本没有区别,只是应用场景不同。在使用时候必须要包含文件并引入std标准命名空间。

另外:

(1)cin为缓冲流。键盘输入的数据保存在缓冲区中,当要提取时,是从缓冲区中拿。只有把输入缓冲区中的数据取完后,才要求输入新的数据。

(2)输入的数据类型必须与要提取的数据类型一致,否则出错。

(3)空格和回车都可以作为数据之间的分格符,所以多个数据可以在一行输入,也可以分行输入。但如果是字符型和字符串,则空格(ASCII码为32)无法用cin输入,字符串中也不能有空格。回车符也无法读入。

(4)cin和cout可以直接输入和输出内置类型数据,标准库已经将所有内置类型的输入和输出全部重载了:

(5)自定义类型需要对<<和>>进行重载。

2. C++文件IO流

C++根据文件内容的数据格式分为二进制文件文本文件

采用文件流对象操作文件的一般步骤:

(1) 定义一个文件流对象【ifstream ifile(只输入用),ofstream ofile(只输出用),fstream iofile(既输入又输出用)】

(2) 使用文件流对象的成员函数打开一个磁盘文件

(3) 使用提取和插入运算符对文件进行读写操作,或使用成员函数进行读写

(4) 关闭文件

四、stringstream

在C语言中,如果想要将一个整形变量的数据转化为字符串格式,可以使用itoa()函数,或使用sprintf()函数。
但在转化时,都得需要先给出保存结果的空间,空间不好界定,且转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。

int main()
{
    int n = 123456789;
    char s1[32];

    _itoa(n, s1, 10);

    char s2[32];
    sprintf(s2, "%d", n);

    char s3[32];
    sprintf(s3, "%f", n);

    return 0;
}

在C++中,可以使用stringstream类对象来避开此问题。

使用时要包含头文件stream。该头文件下,标准库三个类:istringstreamostringstream stringstream,分别用来进行流的输入、输出和输入输出操作。

其中stringstream主要可以用来:将数值类型数据格式化为字符串,字符串拼接

stringstream实际是在其底层维护了一个string类型的对象用来保存结果

多次数据类型转化时,一定要用clear()来清空,才能正确转化,但clear()不会将stringstream底层的string对象清空。

可以使用s. str("")方法将底层string对象设置为""空字符串

可以使用s.str()将让stringstream返回其底层的string对象

stringstream使用string类对象代替字符数组,可以避免缓冲区溢出的危险,而且其会对参数类型进行推演,不需要格式化控制,也不会出现格式化失败的风险。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 浅谈C++ IO流

    1.输入输出(IO)与流的概念 输入输出(IO)是指计算机同任何外部设备之间的数据传递.常见的输入输出设备有文件.键盘.打印机.屏幕等.数据可以按记录(或称数据块)的方式传递,也可以 流的方式传递. 所谓记录,是指有着内部结构的数据块.记录内部除了有需要处理的实际数据之外,还可能包含附加信息,这些附加信息通常是对本记录数据的描述. 流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操作称

  • C++:IO类,文件输入输出,string流练习题

    目录 前面已经在用的IO库设施 IO类 IO对象不能拷贝或赋值 条件状态 管理输出缓冲 文件输入输出 fstream特有的操作 文件模式 string流 stringstream特有的操作 练习 练习1 练习2 练习3 练习4 练习5 练习6 练习7 练习8 练习9 总结 前面已经在用的IO库设施 istream:输入流类型,提供输入操作. ostream:输出流类型,提供输出操作 cin:一个istream对象,从标准输入读取数据. cout:一个ostream对象,向标准输出写入数据. ce

  • Visual Studio Code 配置C、C++环境/编译并运行的流程分析

    总体流程: 下载安装vscode 安装cpptools插件 安装编译.调试环境 修改vscode调试配置文件 下载安装vscode https://code.visualstudio.com/Download 安装cpptools插件 打开vscode,按ctrl+p打开快速命令框,输入以下命令后等待 ext install cpptools vscode在短暂的联网查找后会列出插件列表,如图: 点击箭头所指处的按钮安装插件,安装过程可能会有些慢耐心等待 安装完成后vscode会提示你重启vsc

  • Visual Studio Code (vscode) 配置 C / C++ 环境的流程

    昨天突发奇想,想使用vscode配置C++环境,因为不想下载 Dev OR codeblock,然后借助了很多网上教程,用了昨天整整一下午的时间最后终于成功了(哈哈哈哈哈--).今天跟大家分享一下~~~ 因为还只是个编程小白,参考资料有点多 ↓ ↓ ↓ 官方文档 -- 参考配置过程CSDN原创文章 -- 参考主要配置过程知乎达人 -- 参考环境准备 ➺➻➸ 主要流程: 1. 下载VScode 2. 安装cpptools工具 3. 下载MinGW 4. 配置环境变量 5. 使用简单的.cpp文件配

  • 一文带你了解Java中IO流与Guava的使用

    目录 Guava IO 分类 常用的流 示例 Guava中的IO 其他 结束语 Guava IO 日常系统交互中,文件的上传下载都是常见的,一般我们会通过jdk提供的IO操作库帮助我们实现.IO指的是数据相对当前操作程序的入与出,将数据通过 输出流从程序输出,或者通过输入流将数据(从文件.网络.数据等)写入到程序,这里的IO指的是基于流作为载体进行数据传输.如果把数据比作合理的水,河就是IO流,也是数据的载体. Java为我们提供了非常多的操作IO的接口与类,帮助开发者实现不同源间的数据传输,比

  • 带你了解C++的IO流

    目录 一.C语言的输入与输出 二.C++中流的概念 三.C++IO流 1.C++标准IO流 2. C++文件IO流 四.stringstream 总结 一.C语言的输入与输出 C语言中我们最长用到的输入输出方式就是scanf ()与printf(). scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中. printf(): 将指定的文字/字符串输出到标准输出设备(屏幕). C语言借助了相应的缓冲区来进行输入与输出.如下图所示: 其中,输入输出缓冲区的作用:可以屏蔽掉低级I/O的

  • Java 编程之IO流资料详细整理

    java IO详解: Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流  字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码

  • 【Java IO流】字节流和字符流的实例讲解

    字节流和字符流 对于文件必然有读和写的操作,读和写就对应了输入和输出流,流又分成字节和字符流. 1.从对文件的操作来讲,有读和写的操作--也就是输入和输出. 2.从流的流向来讲,有输入和输出之分. 3.从流的内容来讲,有字节和字符之分. 这篇文章先后讲解IO流中的字节流和字符流的输入和输出操作. 一.字节流 1)输入和输出流 首先,字节流要进行读和写,也就是输入和输出,所以它有两个抽象的父类InputStream.OutputStream. InputStream抽象了应用程序读取数据的方式,即

  • Java中IO流 字节流实例详解

    Java中IO流 字节流实例详解 IO流(输入流.输出流),又分为字节流.字符流. 流是磁盘或其它外围设备中存储的数据的源点或终点. 输入流:程序从输入流读取数据源.数据源包括外界(键盘.文件.网络-),即是将数据源读入到程序的通信通道. 输出流:程序向输出流写入数据.将程序中的数据输出到外界(显示器.打印机.文件.网络-)的通信通道. 字节流 1.InputStream.OutputStream InputStream抽象了应用程序读取数据的方式 OutputStream抽象了应用程序写出数据

  • Java IO流 文件传输基础

    一.文件的编码 package com.study.io; /** * 测试文件编码 */ public class EncodeDemo { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { String s="好好学习ABC"; byte[] bytes1=s.getBytes();//这是把字符串转换成字符数组,转换成的字节序列用的是

  • Java IO流学习总结之文件传输基础

    一.Java IO流总览 二.File类 2.1 常用API package pkg1; import java.io.File; import java.io.IOException; /** * @author Administrator * @date 2021/4/2 */ public class FileDemo { public static void main(String[] args) { // 了解构造函数,可查看API File file = new File("d:\\

  • Java的File类和IO流其实真的不难

    目录 IO流: File类: 字节输出流: 字节输入流(从文件读取到控制台): 字符输出流: 字符输入流: 总结 IO流: IO流概述: IO:输入/输出(Input/Output) 流:是一种抽象概念,是对数据传输的总称.也就是说数据在设备间的传输称为流,流的本质是数据传输IO流就是用来处理设备间数据传输问题的, 常见的应用:文件复制;文件上传;文件下载等等,总而言之,涉及到传输的,都涉及到流. IO流体系图: 既然IO是涉及文件的操作,那么一定离不开文件操作的技术: File类: File

  • 一起来了解Java的File类和IO流

    目录 IO流: File类: 字节输出流: 字节输入流(从文件读取到控制台): 字符输出流: 字符输入流: 总结 IO流: IO流概述: IO:输入/输出(Input/Output) 流:是一种抽象概念,是对数据传输的总称.也就是说数据在设备间的传输称为流,流的本质是数据传输IO流就是用来处理设备间数据传输问题的, 常见的应用:文件复制;文件上传;文件下载等等,总而言之,涉及到传输的,都涉及到流. IO流体系图: 既然IO是涉及文件的操作,那么一定离不开文件操作的技术: File类: File

  • Java中IO流概述

    目录 1.InputStream 和 OutputStream 继承结构图: 2.Reader 和 Writer 继承结构图: 3. 内容 4.面试题 1.字节流和字符流的区别? 2.什么是 IO 流? 3.有哪些可用的 Filter 流? 4.Java 中有几种类型的流? 5.如何实现对象克隆? 6.什么是缓冲区?有什么作用? 总结 1.InputStream 和 OutputStream 继承结构图: 2.Reader 和 Writer 继承结构图: 3. 内容 3.1 Java 流概述文件

随机推荐