为了方便起步先从istream类对象cin和ostream类对象cout开始,了解输入和输出的基本方法;

同时使用ifstream和ofstream对象进行文件的输入和输出;

然后详细学习cin和cout类,看看它们是如何设计的?学习如何控制输出格式

用于文件输入和输出的C++工具都是基于cin和cout所基于的基本类定义;

以控制台I/O为跳板,来研究文件I/O;

首先回顾一下I/O发展历程

C语音最初把I/O留给了编译器实现人员,这是为了让实现人员能够自由设计I/O函数,使之最适合于目标计算机的硬件要求。

实际上,多数实现人员都把I/O建立在最初为UNIX环境开发的库函数的基础上。

后来ANSI C正式承认这个I/O软件包,将其称为标准输入/输出包,将其作为C库不可或缺的一部分。

C++也承认这个软件包,因此可以在C++程序中使用stdio.h文件中声明的C函数系列。

然而C++依赖于C++的I/O解决方案,而不是C语言的I/O解决方案。

前者是在头文件istream和fstream中定义了一组类。

但是这个类库不是正式语言定义的一部分,这是因为语言毕竟只是定义了工作的规则,但没有定义要按照这些规则创建哪些东西。

C++也自带了一个标准类库,但是这个标准不是一个正式的标准,只是由iostream和fstream中定义的类组成的。

ANSI/ISO C++委员会决定把这个类正式作为一个标准类库,并添加其他一些标准类。

后面会开始讨论C++ I/O的概念框架

=====================================================

一、流和缓冲区

C++程序把输入和输出看成字节流。

输入时,程序从输入流抽取字节。

输出时,程序将字节插入输出流中。

更通俗地讲:字节可以构成字符或数值数据的二进制表示。//字节可以被解释成字符或者数值数据

输入流中的字节可能来自键盘、文件、存储设备或其他程序;

输出流的字节可以流向屏幕、打印机、存储设备或其他程序;

充当了程序和流源流目标之间的桥梁。

这样做的好处是使得C++程序可以以相同的方式对待来自键盘的输入和来自文件的输入;就是屏蔽了外界的差异性。

C++程序只是检查字节流。而不需要知道字节来自何方,去向哪里。

输入和输出的管理,就是要将流的两端连起来,

对于输出流:一端是程序,一端是流向的目的地;

对于输入流:一端是程序,一端是流入的源;

通过使用缓冲区可以更高效地处理输入和输出。

缓冲区是用作中介的内存块。它是将信息从设备传输到程序或者从程序传输得设备的临时存储工具。

缓冲区可以帮助匹配不同的信息传输速率。

输出时程序先把整块数据传输给硬盘,并清空缓冲区,以备下一批输出使用。

这被称为刷新缓冲区

C++程序通常在用户按下回车键时刷新输入缓冲区。

键盘输入进行缓冲可以让用户在将输入传输给程序之前返回并更正。

对于屏幕输出,C++程序通常在用户发送换行符时,刷新输出缓冲区。

=====================================================

二、流、缓冲区和iostream文件

管理流和缓冲区的工作有点复杂,但iostream文件中包含一些专门设计用来实现、管理流和缓冲区的类。

使用ostream对象(cout)来处理输出。

=====================================================

三、重定向

标准输入和输出流通常连接着键盘和屏幕;

但很多操作系统都支持重定向,这个工具使得能够改变标准输入和标准输出;

cout代表的标准输出流是程序输出的常用通道。标准错误流(由cerr和clog代表)用于程序的错误消息 。

默认情况下,这3个对象都被发送给显示器。

但对标准输出重定向并不会影响cerr和clog,因此如果使用其中一个对象来打印错误消息,程序将在屏幕上显示错误消息,即使常规的cout输出被重定向到其他地方。

C++_IO与文件1-输入与输出概述的更多相关文章

  1. C++:文件的输入和输出

    1.共同的打开文件方式: fin.open("test.txt",ios::binary) fout.open("test.txt",ios::binary) ...

  2. 雷林鹏分享:C# 文件的输入与输出

    C# 文件的输入与输出 一个 文件 是一个存储在磁盘中带有指定名称和目录路径的数据集合.当打开文件进行读写时,它变成一个 流. 从根本上说,流是通过通信路径传递的字节序列.有两个主要的流:输入流 和 ...

  3. 雷林鹏分享:Ruby 文件的输入与输出

    Ruby 文件的输入与输出 Ruby 提供了一整套 I/O 相关的方法,在内核(Kernel)模块中实现.所有的 I/O 方法派生自 IO 类. 类 IO 提供了所有基础的方法,比如 read. wr ...

  4. C++_IO与文件4-简单文件的输入与输出

    通过键盘输入和屏幕输出被称为是控制台输入/输出: 更广义上讲控制台的输入/输出也是一种特殊的文件输入/输出: 当使用cin进行输入时,程序将输入视为一系列的字节,其中的每个字节都被解释成字符编码: 不 ...

  5. 听翁恺老师mooc笔记(15)--文件的输入与输出

    <>重定向 如果使用标准的printf输出,有一个比较简便的方法,可以将程序的结果写入一个文件.使用<和>符号,将程序运行结果重定向到文件中去,具体使用到的代码如下: ./te ...

  6. 【python】文件的输入和输出

    1.os模块 2.os.path 模块 3.实例 1. os模块 对文件系统的访问大多通过python的os模块实现,其中os 模块负责大部分的文件系统操作,包括删除/重命名文件,遍历目录树,管理文件 ...

  7. Linux命令总结_文件的输入与 输出

    1.echo命令 例子:echo string 解释:echo命令用于显示文本或变量,或者把字符串输入到文件,常用的几个特殊字符有以下几个 \c 不换行 \f 进纸 \t 调格 \n 换行 例子:ec ...

  8. Python 文件的输入与输出

    1. 文本文件的读写主要通过open()所构建的文件对象来实现.我们打开一个文件,并使用一个对象来表示该文件 , f = open(d,r) 其中d是文件名,r是模式 "r" 文件 ...

  9. 【Python+Selenium】猪猪练习成功版:csv文件的输入和输出(运行环境:python3.5版本)

    自己实践成功的从csv文件中读取用户名密码并实际登录系统后判断是否登录成功,并将已经运行的用户名密码及运行结果输出到一个新的csv文件中~ # coding=utf-8 from selenium i ...

随机推荐

  1. jquery on事件在IE8下失效的一种情况,及解决方法/bootstrap空间绑定控件事件不好用

    同事在复制bootstrap中的select控件之后,发现用$('.selectpicker').selectpicker();刷新下拉框控件不好使,后来发现是用原生js克隆的方法obj.cloneN ...

  2. 什么是Kali Linux?

    什么是Kali Linux? Kali Linux是一个基于Debian的Linux发行版,旨在实现高级渗透测试和安全审计.Kali包含数百种工具,适用于各种信息安全任务,如渗透测试,安全研究,计算机 ...

  3. SpringMVC第二天

    SpringMVC第二天   框架课程 1. 课程计划 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 2.@RequestMapping注解的使用 3.Controller方法 ...

  4. Django--admin后台

    需求 通过后台和models​操作数据库表 实现 1.后台中看到数据库中的表 app01/admin.py 1 2 from app01 import models admin.site.regist ...

  5. 36.LEN() 函数

    LEN() 函数 LEN 函数返回文本字段中值的长度. SQL LEN() 语法 SELECT LEN(column_name) FROM table_name SQL LEN() 实例 我们拥有下面 ...

  6. 显著水平alpha

    http://blog.minitab.com/blog/adventures-in-statistics-2/understanding-hypothesis-tests:-significance ...

  7. 7.python实现高效端口扫描器之nmap模块

    对于端口扫描,使用的最多的就是nmap这个工具,不想python已经强大到,提供了nmap这个扫描端口的模块. 本片文章主要介绍nmap模块的两个常用类: PortScanner()类,实现一个nma ...

  8. LightOJ 1282 Leading and Trailing (数学)

    题意:求 n^k 的前三位和后三位. 析:后三位,很简单就是快速幂,然后取模1000,注意要补0不全的话,对于前三位,先取10的对数,然后整数部分就是10000....,不用要,只要小数部分就好,然后 ...

  9. do_gettimeofday使用方法

    1.简介: 在Linux中可以使用函数do_gettimeofday()函数来得到精确时间.它的精度可以达到微妙,是与C标准库中gettimeofday()用发相同的函数.在Linux内核中获得时间的 ...

  10. delphi TString使用(取有规律的字符串中某一项内容)

    {目的,取得下面字符串中的每一项内容,如s:='a,b,c,d',要去的用逗号隔开的每一项内容这时采用Tstring,会方便很多,TString是继承TStringList带有List所有属性.} v ...