文档章节

初级C++4IO流

把南墙撞开
 把南墙撞开
发布于 2016/03/25 20:12
字数 2232
阅读 44
收藏 2

输入输出流


输入输出的含义:

从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件。


程序的输入:从文件传送给程序。

程序的输出:从程序传送给文件。


分类:

1、标准I/O   键盘输入 显示器输出

2、文件I/O   外存输入 外存输出

3、字符串I/O 内存输入 内存输出



C语言回顾

int i= 1; //假定占2字节

printf("%d",i); //正确输出

printf("%d",f); //f为float型,只输出f变量的前两个字节

printf("%d","C++"); //输出字符串的起始地址


scanf("%d",&i);//将内容写入变量i

scanf("%d",i);//将内容写入内存地址为i的地方



C++的输入输出中,编译系统对数据类型进行严格的检查。

C++的I/O操作是类型安全的。 type safe



——————————————————————————————


流stream

输入输出流是指由若干字节组成的字节序列,这些字节中的数据按顺序从一个对象传送到另一对象。

流表示了信息从源到目的端的流动。


实际上,在内存中为每一个数据流开辟一个内存缓冲区,用来存放流中的数据。

流是与缓冲区相对应的。

缓冲区中的数据就是流。



输入输出流被定义为类

I/O库中的类被称为流类 stream class

用流类定义的对象被称为流对象




ios

istream ostream fstreambase strstreambase

iostream ifstream istrstream ofstream ostrstream istream_withassign ostream_withassign

fstream strstream iostream_withassign


与iostream类库有关的头文件

iostream  包含输入输出流的基本信息

fstream   文件I/O

strstream 字符串I/O

stdiostream 用于混合使用C和C++的I/O机制:例如想将C程序转变为C++程序

iomanip  使用格式化I/O时应包含此头文件



在iostream头文件中定义的类:

ios istream ostream iostream istream_withassign ostream_withassign istream_withassign


在iostream头文件中定义的对象:

cin  istream_withassign类对象 stdin

cout ostream_withassign类对象 stdout

cerr ostream_withassign类对象 stderr

clog ostream_withassign类对象 stderr


—————————————————————————————

标准输出流


cout流对象

console output

1、cout是流对象

2、自动判断输出类型

3、在内存中自动开辟缓冲区,插入endl时输出缓冲区中的所有数据,并刷新流。

   “\n”没有此效果(不是所有编译系统都体现这一区别)


cerr流对象

console error

向标准出错设备 standard error device 输出有关出错信息

和cout的不同:

cout可以被重定向输出到磁盘文件

cerr不能重定向,只能在显示器输出



clog流对象

console log

标准出错流 作用与cerr相同

与cerr区别:

cerr不经过缓冲区

clog有缓冲区


——————————————————————————————


格式输出

    |--使用控制符

    |--使用流对象的有关成员函数


使用控制符控制输出格式:

头文件iomanip

dec hex oct

setbase(n)

setfill(c)

setprecision(n)

setw(n)

setiosflags(ios::fixed)

setiosflags(ios::scientific)

setiosflags(ios::left)

setiosflags(ios::right)

setiosflags(ios::skipws)

setiosflags(ios::uppercase)

setiosflags(ios::showpos)

resetioflags()



用流对象的成员函数控制输出格式

cout中的成员函数

precision(n) 

width(n)

fill(c)

setf()

unsetf()


格式标志在ios中被定义为枚举值

ios::left

ios::right

ios::internal


ios::dec

ios::oct

ios::hex


ios::showbase

ios::showpoint

ios::uppercase

ios::showpos


ios::scientific

ios::fixed


ios::unitbuf  每次输出后刷新

iso::stdio    每次输出后清除stdout stderr


说明:

1、成员函数width(n)和控制符setw(n)只对其后的第一个输出项有效

2、输出格式状态分为5组,每组中只能一个生效

3、用setf函数设置格式状态时,可以包含两个或多个格式标志

   这些格式标志在ios类中被定义为枚举值,每一个格式标志以一个二进位代表

   可以用“位或”运算符“|”组合多个格式标志

cout.setf(ios::internal | ios::showpos);


用控制符更为方便


——————————————————————————————


用流成员函数put输出字符

专用于输出单个字符的成员函数put

cout.put('a'); //字符

cout.put(65+32); //ASCII码

cout.put(71).put(79).put(79).put(68).put('\n');// GOOD


C语言中,putchar()定义在stdio.h中

C++中,putchar()定义在iostream中



———————————————————————————



标准输入流 键盘

>> 流提取符  终止标志:输入流中的white space(空格 tab 换行)

只有输入完数据再按回车键后,该行数据才被送入键盘缓冲区,形成输出流,提取运算符">>"才能从中提取数据。


cin

正常状态:1 true

出错状态:0 false  无效字符 文件结束符   


文件结束符

IBM PC Ctrl+Z

  Unix Ctrl+D


   

用于字符输入的流成员函数


get的3种形式

    |--cin.get()   返回读入的字符 遇EOF结束  C语言中的getchar()功能相同

    |--cin.get(ch) 返回bool值  C语言中的getchar(ch)

    |--cin.get(字符数组,字符个数,终止字符) 读取n-1个字符赋给字符数组,终止字符默认为'\n'



getline(字符数组,字符个数,终止字符)

和cin.get的不同,cin.get在终止字符之前停止,getline在终止字符之后停止


>>可读取标准类型

getline只能操作字符



eof函数 end of file

cin.eof() 末尾为真


peek函数

cin.peek() 观察下一字符而指针不动


putback函数

cin.putback(ch) 将字符ch插入到当前指针位置,以供后面读取


ignore函数

cin.ignore(n,终止字符)

cin.ignore(5, 'A') //跳过输入流中的5个字符,遇A终止跳跃

cin.ignore() //等同于 cin.ignore(1,EOF)


——————————————————————————————


文件操作与文件流


文件的概念:file 存储在外部介质上数据的集合

操作系统以文件为单位对数据进行管理


文件分类:

    |--程序文件 program file  .cpp  .obj  .exe

    |--数据文件 data file

在程序运行时,将一些数据输出到磁盘上存放起来,以后需要时再从磁盘中输入到计算机内存


组织形式划分:

    |--ASCII文件   字符文件

    |--二进制文件  字节文件



int i = 100;

低级I/O   二进制形式 不进行数据格式转换

高级I/O   字符串形式 将数据从内存送到显示器输出


——————————————————————————————


输出文件流:从内存流向外存文件的数据

输入文件流:从外存文件流向内存的数据


文件流类

ifstream  ASCII 二进制 文件输入

ofstream  ASCII 二进制 文件输出

fstream   二进制文件输入输出


必须事先定义流对象

cin cout cerr clog 是在iostream中已经定义好的流对象


ofstram outfile;//定义输出文件流对象


文件的打开与关闭


文件流对象.open(磁盘文件名,输入输出方式);

outfile.open("f1.dat",ios::out);


ofstream outfile("f1.dat",ios::out);


输入输出方式在ios类中定义,是枚举常量

ios::in

ios::out

ios::app

ios::ate

ios::trunc

ios::binary

ios::nocreate  新版C++不提供

ios::noreplace 新版C++不提供

ios::in | ios::out

ios::out |ios::binary

ios::in | ios::binary



每打开一个文件都有一个文件指针


打开操作失败,返回0

构造函数失败,返回0


关闭磁盘文件

outfile.close();



C语言,exit() 函数定义在 stdlib.h中

—————————————————————————————


对ASCII文件的操作的两种操作

    |-- <<  >>

    |--get getline

put



对二进制文件的操作

    将内存中数据存储形式不加转换地传送到磁盘文件,因此它又称为内存数据的映象文件 又称为字节文件。

    在打开时要用ios::binary指定为二进制形式传送和存储。

    二进制文件可以既能输入,又能输出——与ASCII文件不同的地方。

    用fstream定义输入输出的二进制文件


用成员函数read write 读写

istream& read(char *buffer, int len);

ostream& write(const char *buffer, int len);


与文件指针有关的流成员函数

二进制文件允许对指针进行控制,以便在该位置上进行读写

gcout()


tellg()

seekg(文件中的位置)

seekg(位移量,参照位置)


tellp()

seekp(文件中的位置)

seekp(位移量,参照位置)


位移量 和 参照位置 为long型整数,以字节为单位

参照位置:在ios中定义的枚举常量

ios::beg

ios::cur

ios::end


—————————————————————————


字符串流

以内存中用户定义的字符数组(字符串)为输入输出的对象


内存 <-> 缓冲区 <-> 数组

二进制   ASCII      ASCII


istrstream

ostrstream

strstream


不需要打开和关闭字符串流

自定义结束标志


输出字符串流对象

ostrstream构造函数原型

ostrstream::ostrstream(char * buffer, int n, int mode = ios::out); 

//第三个参数默认为ios::out

//n 缓冲区大小(与数组可以相同,也可以不同)

ostrstream srtout(ch1, 20);



输入字符串流对象

istrstream::istrstream(char * buffer);

istrstream::istrstream(char * buffer, int n);

istream strin(ch2);

istream strin(ch2,20);



输入输出字符串流对象

strstream::strstream(char * buffer, int n, int mode);

strstream strio(ch3, sizeof(ch3), ios::in | ios::out);


明天二级 2016-3-25

© 著作权归作者所有

共有 人打赏支持
把南墙撞开
粉丝 0
博文 73
码字总数 21068
作品 0
昌平
私信 提问
全栈工程师的学习之路

一、关于全栈工程师的定义与职务 1. 全栈工程师的定义 随着互联网技术的蓬勃发展,技术变得越来越繁琐,越来越多面化。一个项目的开发,需要使用多样技术。举个例子,一个网站的建设,单论初...

JAVA丶学习
2017/12/27
0
0
FSGui是什么?

QQ群: FreeSWITCH+Kamailio+OpenSIPS,293697898 FSGui是由上海宁卫信息技术有限公司自主研发的新一代的呼叫平台,它将云呼叫、VOIP、PSTN、IMS、DID、IVR等集成在一起,实现将IP网络和传统...

上海李浩
2016/11/01
39
0
webrtc初级教程-仝利-专题视频课程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rootusers/article/details/83551794 webrtc初级教程—9204人已学习 课程介绍 从基础的怎么从网上下载webrtc教...

BIGBurning
2016/02/25
0
0
Scala的级别:初学者到专家,程序员到类库设计者

Created by odersky on 2011-01-16. Updated: 2011-01-16, 17:35 Scala有一些善变和灵活。它令许多编程任务变得简单,但是同时它还包含了一些复杂的结构以便专家来设计真正高级的,类型安全的...

崔钢
2011/02/20
0
2
最新初级建构筑物消防员证 2018新版初级建构筑物消防员证 样板

最新初级建构筑物消防员证 2018新版初级建构筑物消防员证 样板最新初级建构筑物消防员证 2018新版初级建构筑物消防员证 最新初级建构筑物消防员证 2018新版初级建构筑物消防员证 样板最新初级...

hujuh5655
2018/08/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

kettle demo9 在Java代碼中读取文件内容插入到数据库

kettle调用java代码一步步扩展,本次在Java代码里读取本地文件,然后把数据插入到数据库 本地文件内容,book.txt 完整流程图 1、生成记录,设置1条 2、java代码,主要两部分,第一,方法上面...

wells杨
32分钟前
3
0
使用split_size优化的ODPS SQL的场景

首先有两个大背景需要说明如下: 说明1:split_size,设定一个map的最大数据输入量,单位M,默认256M。用户可以通过控制这个变量,从而达到对map端输入的控制。设置语句:set odps.sql.mapp...

阿里云官方博客
35分钟前
3
0
让线程按顺序执行8种方法

实现 我们下面需要完成这样一个应用场景: 1.早上;2.测试人员、产品经理、开发人员陆续的来公司上班;3.产品经理规划新需求;4.开发人员开发新需求功能;5.测试人员测试新功能。 规划需求,...

编程SHA
38分钟前
2
0
云服务无法绑定公网IP问题解决方案

问题描述:在云服务器上跑的代码启动服务监听公网IP的时候可能报如下异常 bind: cannot assign requested addressbind: cannot assign requested address ..... 查看配置文件写的确实是ssh连...

MrPei
41分钟前
4
0
java中的this::

::是java8 中新引入的运算符 Class::function的时候function是属于Class的,应该是静态方法。 this::function的funtion是属于这个对象的。 注意: 调用方法可以名称不一样,但是需要参数一样...

Java搬砖工程师
45分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部