初级C++4IO流

本秂侑毒 提交于 2019-12-07 16:23:35

输入输出流


输入输出的含义:

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


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

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


分类:

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!