[C++]输入/输出流类库
来源:互联网 发布:极点输入法linux版 编辑:程序博客网 时间:2024/05/04 06:16
输入/输出流类库
编译系统已经以运算符或函数的形式做好了对标准外设(键盘、屏幕、打印机、文件)的接口,使用时只需按照要求的格式调用即可。
cin>>x; cout<<x;
cin.get(ch);
输入输出流(I/O Stream)
C++语言的I/O系统向用户提供一个统一的接口,使得程序的设计尽量与所访问的具体设备无关,在用户与设备之间提供了一个抽象的界面:输入输出流。
用标准流进行输入/输出时,系统自动地完成数据类型的转换。对于输入流,要将输入的字符序列形式的数据变换成计算机内部形式的数据(二进制或ASCII)后,再赋给变量,变换后的格式由变量的类型确定。对于输出流,将要输出的数据变换成字符串形式后,送到输出流(文件)中。
重载输入(提取)和输出(插入)运算符
class A
{ float x, y;
public:
A(float a=0, float b=0){ x=a; y=b; }
void Set(float a, float b){ x=a; y=b; }
void Show(void){ cout<<x<<‘\t’<<y<<endl; }
};
void main(void)
{ A a(2,3);
a.Set(20 , 30); 输入对象数据
a.Show( ); 输出对象数据
}
对象不能直接输入输出
在C++中允许用户重载运算符“<<”和“>>”,实现对象的输入和输出。重载这二个运算符时,在对象所在的类中,将重载这二个运算符的函数说明该类的友元函数。
重载提取运算符的一般格式为:
istream & operater >>(istream &is, ClassName &f);
返回值类型:类istream的引用,cin中可以连续使用运算符“>>”。
cin>>a>>b;
第一个参数:是“>>”的左操作数cin类型,类istream的引用
第二个参数:是“>>”的右操作数,即欲输入的对象的引用.
重载输出(插入)运算符的一般格式为:
与输入(提取)运算符比较:
friend istream & operater >>(istream &, ClassName &);
将输入流改为输出流。
编译系统已经以运算符或函数的形式做好了对标准外设(键盘、屏幕、打印机、文件)的接口,使用时只需按照要求的格式调用即可。
文件流
C++在头文件fstream.h中定义了C++的文件流类体系 ,当程序中使用文件时,要包含头文件fstream.h 。
当使用文件时,在程序头有:#include<fstream.h>
其中定义了各种文件操作运算符及函数。
程序对文本文件的操作与对键盘、显示器的操作比较:
在涉及文本文件的操作时,将输入文件看成键盘,将输出文件看成显示器,格式不变。只需在程序中增加打开与关闭文件的语句。
文件的操作
56:ASCII表示为 00110101 00110110,占两字节
56:二进制表示为 111000,占六个二进制位
不同的文件操作的函数、格式不同
文本文件的打开与关闭
在文件操作前,需要将程序与被操作的文件联系起来,使程序可以“引用”文件。
在程序内定义一个文件类的对象,由该对象与文件发生联系,程序内所有的与文件的操作都是对该对象的操作。
fstream infile , outfile; 两个对象,可以联系两个输入输出文件
ifstream infile; 对象只能联系输入文件
ofstream outfile; 对象只能联系输出文件
如何使文件类的对象与欲操作的文件发生联系?
用对象打开文件:
ifstream infile; //定义输入文件类对象
infile.open(“myfile1.txt”);//利用函数打开某一文件
打开文件的作用是,使文件流对象与要使用的文件名之间建立联系。
ofstream outfile; //定义输出文件类对象
outfile.open(“myfile1.txt”);//打开某一文件供输出
infile.open(“myfile1.txt”);
打开文件“myfile1.txt”用于输入,并将这个文件与输入文件类对象infile建立联系,今后,在程序中,用到这个文件“myfile1.txt”的地方就用infile来代替。
outfile.open(“myfile2.txt”);
打开文件“myfile2.txt”用于输出,并将这个文件与输出文件类对象outfile建立联系,今后,在程序中,用到这个文件“myfile2.txt”的地方就用outfile来代替。
如何从文件中输入输出数据?
将文件类对象看成键盘和显示器即可。
ifstream infile; //定义输入文件类对象
infile.open(“myfile1.txt”);//利用函数打开某一文件
float x , y;
infile>>x>>y;
ifstream outfile; //定义输出文件类对象
infile.open(“myfile2.txt”);//利用函数打开某一文件
float x=3 , y=4;
outfile<<x<<‘\t’<<y<<endl;
4)用完文件后,使用成员函数关闭文件.如:
ifstream infile;
ofstream outfile
infile.open(“myfile1.txt”);
outfile.open(“myfile2.txt”);
float x,y;
infile>>x>>y;
outfile<<x<<‘\t’<<y<<endl;
infile.close();
outfile.close();
void main(void)
{ int a[10];
ifstream infile;//定义输入文件类
ofstream outfile;//定义输出文件类
infile.open(“file1.txt”);//打开一个输入文件“file1.txt”
outfile.open(“file2.txt”);//打开一个输出文件“file2.out”
for(int i=0;i<10;i++)
infile>>a[i];//将“file1.txt”中的十个整型数输入到a[i]中
for(i=0;i<10;i++)
outfile<<a[i]<<‘\t’;//将a[i]中的十个数输出到文件“file2.txt”中
outfile<<endl;
infile.close();//关闭输入文件
outfile.close();//关闭输出文件
}
当用类fstream定义文件对象时,该对象即能定义输入文件对象,又能定义输出文件对象,所以打开文件时,必须在成员函数open()中的参数中给出打开方式(读或写)。
在打开文件后,都要判断打开是否成功。若打开成功,则文件流对象值为非零值;若打开不成功,则其值为0。
ifstream pfile1,pfile2;//定义了两个文件类的对象
pfile1.open(“file1.txt”, ios::in);
pfile2.open(“file2.txt”, ios::out);
if (!pfile1) //若为0,打开文件操作失败
{cout <<”不能打开输入文件:file1.txt”<<’\n’; exit(1);}
if (!pfile2)
{cout <<”不能打开输出文件:file2.txt”<<’\n’; exit(1);}
打开输入文件时,文件必须存在。
打开输出文件时,若文件不存在,则建立文件;若文件存在,则删除原文件的内容,使其成为一个空文件。
涉及到字符串的文件读写
char ch, str[300];
ifstream infile(“myfile1.txt”);
ofstream outfile(“myfiel2.txt”);
从文件输入一字符或一行字符,当输入至文件尾时,函数返回值为0,可以据此来判断循环结束。
从键盘输入一个字符:cin.get(ch);
从文件输入一个字符:infile.get(ch);
向显示器输出一个字符:cout.put(ch);
向文件输出一个字符:outfile.put(ch);
从键盘输入一行字符:cin.getline(str,300);
从文件输入一行字符:infile.getline(ch,300);
二进制文件的读写操作
若在文件的打开方式中没有特别说明,打开的文件均为ASCII码文件,若要打开二进制文件,则要特别说明并用特定的读写函数。
由于二进制文件中的数据不是ASCII码,故不能直接对其读写,必须要通过特定的函数予以转换。
判断二进制文件是否读到文件尾?
infile.eof( )
当到达文件结束位置时,该函数返回一个非零值;否则返回零。
fstream infile;
infile.open(“data1.dat”,ios::in|ios::binary);
if(!infile) //判断打开是否出错
{ cout<<“Open Error!\n”; exit(1); }
char str[300];
while(!infile.eof()) //判断是否读到文件尾
infile.read(str, 300);
文件指针
当一打开文件,文件指针位于文件头,并随着读写字节数的多少顺序移动。
可以利用成员函数随机移动文件指针。
随机读取二进制文件
infile.seekg(int);//将文件指针移动到由参数指定的字节处
infile.seekg(100);//将文件指针移动到距离文件头100个字节处
infile.seekg(100, ios::beg);//移动到距文件头100个字节
infile.seekg(-100, ios::cur);//移动到距当前位置前100个字节
infile.seekg(-500, ios::end);//移动到距文件尾前500个字节
- [C++]输入/输出流类库
- C程序设计语言--输入/输出
- C --- 文件输入/输出
- C格式化输入/输出
- C++:输入与输出
- 【C】标准输入/输出
- C格式化输入、输出
- C输入与输出
- C 输入 & 输出
- C语言 文字输出输入
- c语言 输入/输出函数
- C的输入和输出
- C/C++输入,输出汇总
- C语言文件输入/输出
- C程序设计----输入和输出
- C语言格式化输入/输出
- C++:简单文件输入/输出
- C语言输入和输出
- Java流编程实例及代码
- 翻转句子中单词的顺序,但单词内字符的顺序不变
- Java关键字
- html
- 修改Android签名证书keystore的密码、别名alias以及别名密码
- [C++]输入/输出流类库
- C++中三种正则表达式比较(C regex,C ++regex,boost regex)
- 有向无回路图的理解
- 数据结构之广义表模拟
- 《精进》读书笔记
- Java数据结构-链表
- 《CSS层叠样式表》------第五课
- 数据结构实验之排序七:选课名单
- Parallel.For & Parallel.ForEach & Parallel.Invoke