第13章C的IO流类库
C面向对象程序第13章
整理ppt
7
【例13-1】读入一个整型数据和一个双精度数据并输出
• #include "stdafx.h" • #include "stdio.h" • #include "iostream.h" • void main() •{ • int i; • double d; • cin>>i; • cin>>d; • cout<<i<<","<<d<<endl; • getchar(); •}
整理ppt
9
【例13-2】Point类重载插入运算符示例
• #include "stdafx.h"
• #include "stdio.h"
• #include "iostream.h"
• class point
•{
•
int x,y;
• public:
•
point(int x,int y)
•
{
•
point::x=x;
• width成员函数与fill成员函数均在头文件 iostream.h中说明,因此要使用这两个函数,必 须在程序中包含iostream.h头文件。而预定义格 式控制函数setw在头文件iomanip.h中说明,要使 用setw必须在程序中包含iomanip.h头文件。
整理ppt
14
【例13-3】使用width成员函数控制输出宽度
整理ppt
4
C++语言在开始使用流类时,就预定义了如下4个常 用的输入/输出流对象
• cin:是istream类的对象,用于处理键盘输入。 • cout:是ostream类的对象,用于处理屏幕输出。 • cerr:是ostream类的对象。用于处理出错信息,
C#IO流详解
C#IO流详解分类:C# 2010-12-21 20:13 341人阅读评论(1) 收藏举报文件流和数据流不同的流可能有不同的存储介质,比如磁盘、内存等。
.NET类库中定义了一个抽象类Stream,表示对所有流的抽象,而每种具体的存储介质都可以通过Stream的派生类来实现自己的流操作。
FileStream是对文件流的具体实现。
通过它可以以字节方式对流进行读写,这种方式是面向结构的,控制能力较强,但使用起来稍显麻烦。
此外,System.IO命名空间中提供了不同的读写器来对流中的数据进行操作,这些类通常成对出现,一个用于读、另一个用于写。
例如,TextReader和TextWriter以文本方式(即ASCII方式)对流进行读写;而BinaryReader和BinaryWriter采用的则是二进制方式。
TextReader和TextWriter都是抽象类,它们各有两个派生类:StreamReader、StringReader以及StreamWriter、StringWriter。
17.3.1 抽象类StreamStream支持同步和异步的数据读写。
它和它的派生类共同组成了.NET Framework上IO操作的抽象视图,这使得开发人员不必去了解IO操作的细节,就能够以统一的方式处理不同介质上的流对象。
Stream类提供的公有属性见表17.4所示。
表17.4 Stream类的公有属性属性名类型含义CanRead bool 是否可以读取流中的数据CanWrite bool 是否可以修改流中的数据CanSeek bool 是否可以在流中进行定位CanTimeout bool 流是否支持超时机制Length long 流的长度Position long 流的当前位置ReadTimeout int 读超时限制WriteTimeout int 写超时限制其中前4个布尔类型的属性都是只读的。
也就是说,一旦建立了一个流对象之后,流的这些特性就不能被修改了。
C++程序设计教程7
例 7.7(1) 输出运算符 “<<”重载的例子 //例 7.7(1) 运算符 “<<”重载
例 7.7(2) 把重载输出运算符定义为类的友元函数,这样就可 以访问类的私有成员
//例 7.7(2) 运算符 “<<”重载
7.4.2 重载输入运算符 “>>” 只是要把ostream换成istream ,把”<<”用”>>”代替,第二个 参数是一个引用。 定义输入运算符”>>”重载函数的一般格式如下: istream &operator >>(istream &stream, class_name &obj ) { //操作代码 return stream; } 例 7.11重载输入运算符 “>>” //例 7.7(2) 运算符 “>>”重载
fstream
strstream ostream_withassign
iostream
iostream_withassign
7.4 用户自定义类型的输入输出
用户自定义的类型数据的输入或输出,可以通过重载运算符 “>>”和 “<<”来实现,使“>>”和 “<<”可以直接用来输入或 输出类的对象。
7.4.1 重载输出运算符 “<<” 定义输出运算符”<<”重载函数的一般格式如下: ostream &operator <<(ostream &stream, class_name obj ) { //操作代码 return stream; } 函数中的一个参数是对ostream 对象的引用,它可以是其它任 何合法的标示符,但必须与return后面的标示符相同。第二个 参数接受将被输出的对象,其中class_name是类名,obj为该类 的对象名。
C第12章-IO流类库PPT课件
void main()
{ cout.put('B').put('E').put('I').put('J').put('I').put('N').put('G').put('\n');
char *str="I love BEIJING!";
cout<<"The string is "<<str<<endl;
cout.write(const char *str,int n);
str是一个字符指针或字符数组名,用来存放 一个字符串,也可以是字符串常量; n用来指定输出字符串中字符的个数。
-
7
[例13.1]分析下列程序的输出结果,熟悉put()和write()函数的 用法。程序内容如下:
#include <iostream.h>
插入运算符可连续使用,但应注意计算顺序。 系统指定标准输出设备屏幕的对象为cout,将 输出流显示在屏幕上的格式如下: cout << <表达式1> << <表达式2> <<…… ;
使用中应注意<表达式>中运算符的优先级。
-
5
13.1.2 使用成员函数put()输出一个字符 成员函数put()的格式如下: ostream& cout.put(char c);
#include <string.h> void print(char *s) { cout.write(s,strlen(s)).put('\n');
C为何有自己的IO系统
6.4.1 用ios类成员函数格式化
一、格式由状态标志确定,状态标志在状态量中各占一位; 二、详细的格式控制枚举量(表6-1); 三、使用ios成员函数对流的输入输出操作进行格式控制: 1、设置状态标志:setf
6.3.2 ostream
一、ostream提供主要的输出操作,是用户使用流库 的主要界面之一。
二、ostream的简要介绍 1、输出操作 2、随机移动文件指针6.33 输出运算符“<<”
一、又称为插入运算符,包含两个操作数: 1、左操作数:ostream类类型的对象; 2、右操作数:一个预定义类型的变量,也可为重载了该运
算符的类的对象。 3、可以识别预定义类型,也可以识别重载后的类的对象。 二、运算: 1、采用左结合的方式 2、输入语句将跳过空白,从标准输入读取数字。 三、实例6-2 四、”>>”的重载:第二个参数必须是一个引用,目的在于
obj的值能在函数外被修改。
6.4 格式控制
C++中可以用C的printf和scanf进行格式化 I/O(缺点在哪里?)。
6.4.2 用操纵函数控制格式
一、操纵函数: 特殊的,类似于函数的运算符--操纵符。以一个流引
用作为参数,并返回同一流的引用,因此,可以嵌入到输 入或输出操作链中。 1、实例: 2、操纵符函数仅改变流的状态标志; 3、标准操纵符函数(表6-2); 4、在任何时候刷新流ostream:
ostream<<flush; 5、用户可自定义操纵符函数。
一个指向streambuf的指针 格式化标志:format flags io_state:对I/O错误进行处理
C的IO流库
}
使用成员函数get()获取一个字符
get()函数可以从输入流获取一个字 符,并把它放置到指定变量中。该函数 的使用格式:
cin.get(char &ch) &ch是一个字符变量的地址值。
}
#include "iostream.h“\\Ex9_2 void main() {
int a=100; int *pa=&a; cout<<"a="<<a<<endl<<"&a="<<long(&a)<<endl; cout<<"*pa="<<*pa<<endl<<"&pa="<<&pa<<endl; }
#include "iostream.h" #include "string.h" void PrintString(char *s) {
cout.write(s,strlen(s)).put('\n'); cout.write(s,6)<<"\n"; } void main() { char str[]="I love C++"; cout<<"The string is : "<<str<<endl; PrintString(str); PrintString("This is a string"); }
#include "iostream.h“\\Ex9_8
C++的I-O流类库
void main ()
{ Point pt1(0,0),pt2(0,0);
cin >> pt1;
cin >> pt2;
k==ox4d2 输出后将标志恢复。
输出的宽度缺省值为插入符右边的操作数输出所需的最小字符 数。宽度函数可改变缺省值。例如:
int i=123;
cout.width(10);
cout<<i<<‘\n’;
cout<<i; 这段程序的输出为:
123
123
使用width()函数设置宽度后,如果所需的字 符数不小于指定的宽度,则将忽略指定的宽度 值。
重载运算符的返回值类型为ostream &, 在实现时返回输出流参数本身。重载运 算符<<后,可以象输出C++内部类型对 象那样使用 <<来输出Point类型的对象了。 假设P是一个Point类型对象,其X和Y成 负的值为10和20,则下面的语句:
cout <<P;
将在标准输出设备输出如下的内容:
friend ostream & operator << (ostream & ,point &);
};// 重载运算符 >>
istream & operator >> (istream & in, point & pt)
{ char ch; in >> ch; if (ch == ‘c’) { in >> pt.x; in >> ch; in >> pt.y; in >> ch; } return in; }
第13章 C++输入输出流《C++程序设计基础教程》课件
cout.unseft(ios::oct);
char *pt="China"; //pt指向字符串"China"
cout.width(10);
//指定域宽为10
cout<<pt<<endl;
//输出字符串
cout.width(10);
//指定域宽为10
cout.fill('*');
//指定空白处以'*'填充
27
13.4.3 文件的打开与关闭
28
பைடு நூலகம்
若open函数调用失败,返回值为0(假);若构造 函数打开失败,则流对象的值为0。 2. 关闭磁盘文件 成员函数close。
outfile.close( ); 关闭:解除磁盘文件与文件流的关联。
28
13.4.4 对ASCII文件的操作
29
ASCII文件的读写操作
(1) 用文件流对象和流插入运算符"<<"和流提 取运算符">>"输出输入标准类型的数据。
(2) 用文件流的put,get,getline等成员函数进 行字符的输入输出。
29
例13.11从键盘输入10个整数到文件 30
① #include <fstream> void main( ) {
int a[10]; ② ofstream outfile("f1.dat",ios::out);
cout.setf(ios::internal); //数符出现在左侧
cout.precision(6);
//保留6位小数
cout<<pi<<endl; //输出pi,注意数符"+"的位置
CIO流标准库实用PPT课件
方法2: ifstream fin("data.txt",ios::in);
第3209页/共86页
从文件中读取数据
#include <fstream>
#include <iostream>
using namespace std;
第112页/共86页
文件的概念
文件 文件是在计算机内存中以二进制表示的数据在 外部存储介质上的另一种存放形式。它可以使数据得 以长期保存。
C++把每个文件都看成是一个有序的字节序列,每个文件都以 文件结束标志结束。例如:
12 3 4 5
n-1
… 文件结束符
第132页/共86页
文件操作
前面,我们讨论的输入输出都是以键盘 为输入设备,显示器为输出设备。在实际应 用中,常以磁盘文件作为输入/输出的对象。
// 写两行
fout << "John" << " " << 90 << endl;
fout << "Eric" fout.close();
/</关< "闭" 文<<件85
<<
endl;
return 0;
}
第232页/共86页
向文件中写数据
fout << "John" << " " << 90 << endl; scores.txt John 90 文件中的内容 Eric 85 fout << "Eric" << 85 << endl;
C++实验十三IO流类库
实验十三I/O流类库1.实验目的1)熟悉流及流类库的作用。
2)掌握流类库常用的类及其成员函数的使用方法3)学习输入输出基本方法及其格式控制4)学习文本文件和二进制文件的输入输出方法2.实验要求:(1)设计一个留言类,实现如下功能:1)程序第一次运行时,建立一个文本文件c:\msg.ini,并把用户输入的信息存入该文件。
2)以后运行时,先读取文件的内容并显示给用户,然后由用户使入新的信息,退出时存入文档。
文件的内容,既可以是最新的,也可以包括以前的信息,请自己选择。
(2)定义一个类,重载输出运算符“<<”,用一定的格式将类的成员显示出来。
3.实验内容:3.1设计一个留言类(1)定义一个类Mailman,在构造函数中检查“c:\msg.ini”文件的存在,如果不存在则创建之,否则读取并显示内容给用户。
C++库函数:Open(“c:\msg.ini” ,ios::in);用法:fstream fs;fs.Open(“c:\msg.ini” ,ios::in);类:class MailMan{fstream fs;char Buf[1024];public:MailMan();virtual ~MailMan();void ReadMsgFromFile();void InMsg();void OutMsg();void SaveMsgToFile();};参考程序:Void MailMan::ReadMsgFromFile(){fs. o pen(“c:\msg.ini” ,ios::in);char temp;fs.unsetf(ios::skipws); //读入空格for(int i=0;i<1024;i++){if(fs>>temp) //读入一个字符,否则返回false{Buf[i]=temp;}Else{ Buf[i]=’\0’;Break;}}Fs.close();}(2)把用户输入的信息存放到程序中定义的缓冲区,请注意缓冲区的大小。
C语言文件操作和IO教程
C语言文件操作和IO教程章节一:C语言文件操作基础C语言中的文件操作是程序与外部文件之间进行数据交流的重要方式。
在进行文件操作之前,我们需要包含头文件 "stdio.h",该头文件中包含了进行文件操作所需的函数和定义。
1.1 文件基本概念文件是存储在存储介质上的一组数据。
在C语言中,文件可以分为文本文件和二进制文件两种类型。
文本文件以可读的ASCII 字符形式存储数据,而二进制文件以字节流形式存储数据。
1.2 文件指针在C语言中,文件指针用于对文件进行操作。
它是一个指向FILE结构体的指针,每个打开的文件都有一个相关的文件指针。
我们可以通过使用标准库函数fopen来打开一个文件,并获取该文件的指针。
1.3 文件的打开和关闭操作文件的打开通过调用fopen函数来实现,其原型为:FILE *fopen(const char *filename, const char *mode);其中filename为文件名,mode为打开方式,如"r"代表只读,"w"代表写,"a"代表追加等。
文件打开成功后,函数返回一个指向该文件的指针;否则返回NULL。
文件的关闭操作使用fclose函数,其原型为:int fclose(FILE *stream);其中stream为要关闭的文件指针。
关闭文件后,相关的文件资源将被释放。
1.4 文件读写操作1.4.1 单个字符的读写为了从文件中读取或写入一个字符,我们可以使用fgetc和fputc函数。
fgetc函数原型为:int fgetc(FILE *stream);其中stream为要读取的文件指针。
该函数返回读取到的字符,若读取失败则返回EOF。
fputc函数原型为:int fputc(int character, FILE *stream);其中character为要写入的字符,stream为要写入的文件指针。
C++的IO流库
预定义的插入符(续)
例1:分析下列程序的输出结果。 #include <iostream.h> #include <string.h> 地址值的 void main() 十进制 { 表示方法 char *str="Hello"; //字符指针 地址值的 int a=100; 十六进制 int *pa=&a; 表示方法 cout<<"*pa="<<*pa<<endl; cout<<"&pa="<<&pa<<" or "<<long(&pa)<<endl; cout<<"The string is "<<str<<endl; cout<<"The address is "<<(void *)str 字符指 <<" or "<<long((void *)str)<<endl; 针地址 }
预定义的提取符(续)
例4:分析下列程序的输出结果。
#include <iostream.h> #include <string.h> void main() { const int SIZE=20; char buf[SIZE]; char *largest; int curLen; int maxLen=-1; int cnt=0; cout<<"Input words:"<<endl;
•cerr:ostream类对象,处理标准出错信息,提供 不带缓冲区的输出; •clog:ostream类对象,处理标准出错信息,提供 带缓冲区的输出;
io
就像C语言一样,C++语言中也没有输入/输出语句。
但C++编译系统带有一个面向对象的输入/输出软件包,它就是I/O流类库。
流是I/O流类的中心概念。
首先介绍流的概念,然后介绍流类库的结构和使用。
对于流类库中类的详细说明及类成员的描述,请读者查阅所使用的编译系统的运行库参考手册。
一、I/O流的概念使用VC++6.0在程序中实现I/O有几种方法:C运行库直接非缓冲的I/OANSI C运行库流I/O控制台和端口直接I/OMicrosoft Foundation类库Microsoft I/O流类库其中I/O流类库对于缓冲的、格式化文本I/O是很有用的,它是C语言中I/O函数在面向对象的程序设计方法中的一个替换产品。
我们简单介绍过,在C++中,将数据从一个对象到另一个对象的流动抽象为“流”。
从流中获取数据的操作称为提取操作,向流中添加数据的操作称为插入操作,数据的输入与输出就是通过I/O流来实现的。
这里,我们进一步介绍流的概念操作系统是将键盘、屏幕、打印机和通信端口作为扩充文件来处理的,而这种处理是通过操作系统的设备驱动程序来实现的。
因此,从C++程序员的角度来看,这些设备与磁盘文件是等同的。
I/O流类就是用来与这些扩充文件进行交互。
当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的对象,另一个是文件对象。
流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动。
程序建立一个流对象,并指定这个流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。
由于流对象是程序中的对象与文件对象进行交换的界面,对程序对象而言,文件对象有的特性,流对象也有,所以程序将流对象看作是文件对象的化身。
流所涉及的范围还远不止于此,凡是数据从一个地方传输到另一个地方的操作都是流的操作。
像网络数据交换、进程数据交换等都是流操作。
因此,一般意义下的读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插入。
io流用法
IO流用法什么是IO流?IO流是Java编程语言提供的一种用于处理输入输出的机制。
IO是Input/Output 的缩写,表示输入和输出。
在Java中,IO流是一种用于读取和写入数据的方式。
IO流被分为输入流和输出流,输入流用于从外部设备(如文件、网络等)读取数据,输出流用于向外部设备写入数据。
IO流的分类Java中的IO流主要分为字节流和字符流两种。
字节流字节流以字节为单位进行读写操作,适用于处理二进制数据或字节流数据。
字节流分为输入字节流和输出字节流。
输入字节流输入字节流用于从外部设备读取数据。
常用的输入字节流有InputStream和FileInputStream。
•InputStream是所有输入字节流的抽象基类,提供了读取字节的基本方法,如read()、read(byte[] b)等。
•FileInputStream是从文件中读取字节的输入流,可以通过FileInputStream 读取文件中的字节数据。
输出字节流输出字节流用于向外部设备写入数据。
常用的输出字节流有OutputStream和FileOutputStream。
•OutputStream是所有输出字节流的抽象基类,提供了写入字节的基本方法,如write(int b)、write(byte[] b)等。
•FileOutputStream是向文件中写入字节的输出流,可以通过FileOutputStream向文件中写入字节数据。
字符流字符流以字符为单位进行读写操作,适用于处理文本数据。
字符流分为输入字符流和输出字符流。
输入字符流输入字符流用于从外部设备读取字符数据。
常用的输入字符流有Reader和FileReader。
•Reader是所有输入字符流的抽象基类,提供了读取字符的基本方法,如read()、read(char[] cbuf)等。
•FileReader是从文件中读取字符的输入流,可以通过FileReader读取文件中的字符数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这四个标准流对象是程序中进行标准输入输出要
用到的。
cin对象是从标准输入设备(键盘)输入到内存的数据流,称 为cin流或标准输入流。
cout对象是从内存输入到标准输出设备(显示器)的数据流, 称为cout流或标准输出流。
第13章C的IO流类库
1) 输入流
在输入操作时,字节流从输入设备(如键盘、 磁盘)流向内存,称为输入流。
2) 输出流
在输出操作时,字节流从内存流向输出设备 (如显示器、打印机、磁盘等),称为输出流。
流中的内容可以是ASCII字符、二进制形式 的数据、图形图像、数字音频视频或其它形式 的信息。
3) 输入输出流的本质
常用iso流类的简要说明和类声明所在的头文 件名见书第373页表13.1。
ios
istream
fstreambase
strstreambase
ostream
ifstream
istrstream
ofstream
ostrstream
iostream
fstream
strstream
ios流类层次图
[说明]
实际上,在内存中为每一个数据流开辟一 个内存缓冲区,用来存放流中的数据。
当用cout和插入运算符“<<”向显示器输出数据时, 先将这些数据送到程序中的输出缓冲区保存,直到 缓冲区满了或遇到endl,就将缓冲区中的全部数据 送到显示器显示出来。
在输入时,从键盘输入的数据先放在键盘的缓冲区 中,当按回车键时,键盘缓冲区中的数据输入到程 序中的输入缓冲区,形成cin流,然后用提取运算符 “>>”从输入缓冲区中提取数据送给程序中的有关 变量。
1.格式状态字 C++可以给每个流对象的输入输出进行格式控制,以满足
程序员对输入输出格式的需求。 输入输出格式由一个long int类型的格式状态字确定,状
态字的各位都控制一定的输入输出特征。 在ios类的public部分定义了一个枚举,它的每个成员可以
分别定义格式状态字的一个位,每一个位称为一个状态标志位。 这个枚举的定义如下:
cerr和clog均为向输出设备(显示器)输出出错信息。
13.2 格式化I/O
在很多情况下,程序员需要控制输入输出格式。 C++提供了两种格式控制方法: 使用ios类中有关格式控制的成员函数; 使用称为控制符的特殊类型的函数。
13.2.1 用ios类的成员函数进行格式控制
ios类中有几个成员函数可以用来对输入输出进行格 式控制。进行格式控制主要是通过对格式状态字、域宽、 填充字符以及输出精度的操作来完成的。
4) 流类
在C++中,输入输出流被定义为类。C++的IO 库中的类称为流类(stream class)。用流类 定义的对象称为流对象。
[例如]
cin和cout就是iostream_withassign类的对 象。
13.1. 2 流类库
C++流库是C++语言为完成输入/输出工作而 预定义的类的集合。
streambuf类提供对缓冲区的低级操作,如设置缓 冲区、对缓冲字符。
streambuf有三个派生类,即filebuf、 strstreambuf和conbuf,其成员函数大多采用内置 函数方式定义,以提高效率。
下图为它们之间的层次关系。
streambuf
在头文件iostream.h中,提供了4个预定义的标 准流对象:
extern istream_withassign cin; // 预定义代表标准输入设备键盘
extern ostream_withassign cout; // 预定义代表标准输出设备显示器
extern istream_withassign cerr; // 预定义代表标准出错输出设备显示器
enum { skipws = 0x0001, left = 0x0002, right = 0x0004, internal = 0x0008, dec = 0x0010, oct = 0x0020, hex = 0x0040,
showbase = 0x0080, showpoint = 0x0100, uppercase = 0x0200, showpos = 0x0400, scientific = 0x0800, fixed = 0x1000, unitbuf = 0x2000, stdio = 0x4000 };
2.ios类中用于控制输入输出格式的成员函数 在ios类的说明中,定义了几个用于格式控制的公有成员
函数,列举如下:
long ios::flags(); // 返回当前格式状态字 long ios::flags(long): // 设置格式状态字并返回 long ios::setf(long); // 设置指定的标志位 long ios::unsetf(long); // 清除指定的标志位 int ios::width(); // 返回当前显示数据的域宽 int ios::width(int); // 设置当前显示数据域宽并返回原域宽 char ios::fill(); // 返回当前填充字符 char ios::fill(char); // 设置填充字符并返回原填充字符 int ios::precision(); // 返回当前浮点数的精度 int ios::precision(int); // 设置浮点数精度并返回原精度
strstreambuf
filebuf
conbuf
2. ios类
ios类是一个虚基类,它主要定义了用于格式 化输入输出及出错的成员函数。
在ios类和它的各级派生类中,均含有一个指 向流缓冲类streambuf的对象的指针。Ios类(及其 派生类)使用streanbuf类以及它派生的文件缓冲 类filebuf和字符缓冲类strstreambuf进行输入输 出。
C++的I/O流类库是用继承方法建立起来的 一个输入输出类库,这些类构成一个层次结构 的系统。
它具有两个平行类:即streambuf类和ios 类,这两个类是基本类,所有的流类都可以由 它们派生出来。
1. streambuf类
streambuf类提供物理设备的接口,它提供缓冲或 处理流的通用方法,几乎不需要任何格式。缓冲区由 一个字符序列和两个指针组成,这两个指针是输入缓 冲区指针和输出缓冲区指针,它们分别指向字符要被 插入或取出的位置。