1,ios 流库的结构,
istream 和 ostream
2,流对象 cin一般指键盘。
流对象 cout一般指屏幕。
3.输入 /输出格式控制的方法:
使用 ios 的成员函数
使用操作函数
cin.getline(buffer,SIZE);
cout.width(10);
cout << setw(10) << x;
cout << setw(10) << setfill('* ') << x;

输出与输入
用户自定义类型的输入 /输出
文件的输入 /输出输入 /输出流库用户自定义类型的输入 /输出自定义输入 /输出类型的目的使用户能使用简洁、有效、便利的方法输入 /输出特殊结构的数据,
如:电话号码,025-3498888
三维点的坐标:( 1,2,3)
实现自定义输入 /输出类型的手段通过对输入 (?)和输出 (?)运算符的重载,
定义特殊的输入 /输出结构例 1:电话号码的输入 /输出
#include <iostream.h>
class PhoneNumber {
friend ostream &operator << (ostream &,const PhoneNumber &); //重载输出运算符
friend istream &operator >> (istream &,PhoneNumber &); //重载输入运算符
private:
char areaCode[4],exg[4],line[5]; };
ostream &operator << (ostream &output,const PhoneNumber &num)
{
output << num.areaCode << "- "<< num.exg << "-" << line;
return output; // 此语句的目的:实现 cout << a << b << c; }
istream &operator >> (istream &input,PhoneNumber &num)
{
input.getline(num.areaCode,4); //读入地区号
input.ignore( ); //跳过横线 -
input.getline(num.exg,4);
input.getline(num.line,5);
return input; // 此语句的目的:实现 in >> a >> b >> c; }
用户自定义类型的输入 /输出例 1:电话号码的输入 /输出(续)
void main( ) {
PhoneNumber phone; //定义一个对象实例 phone
cout << "Enter a phone number in the form 025-3493333," << endl;
cin >> phone; //应用重载的输入运算符读入自定义的类型数据
cout << " The phone number entered was," << endl
<< phone << endl; //应用 重载的输出运算符写出自定义的类型数据
}
结果,Enter a phone number in the form 025-3493333,
025-3492470
The phone number entered was,
025-349-2470
用户自定义类型的输入 /输出例 2:圆的相关数据的输出
#include <iostream.h>
class Circle {
friend ostream &operator << (ostream &,const Circle &); //重载输出运算符
public:
Circle(float a,float b,float c){ radius=a; x=b; y=c;}
private:
float radius; //圆的半径
float x,y; //圆心的坐标
};
ostream &operator << (ostream &output,const Circle &C)
{
output << "Center= [" << C.x << "," << C.y << "]; " << endl
<< " Radius = " << C.radius << endl;
return output;}
void main( )
{ Circle C(2.5,5,10);
cout << C;
}
用户自定义类型的输入 /输出结果,Center=[5,10];
Radius = 2.5
文件输入 /输出的过程
(1) 在程序中包含头文件 fstream.h
(2) 定义流对象,如,ifstream myin; ofstream myout;
(3) 使用 open函数打开文件
(4) 进行文件的读 /写操作
(5) 使用 close函数关闭文件文件的输入 /输出方法一:
定义流对象与打开文件由两条语句完成
ofstream myout; //定义流对象
myout.open(“myfile,,ios::out,0); //打开文件
myout <<,Write some words in myfile,; //向文件写数据定义流对象与打开文件方法二:
定义流对象与打开文件由一条语句完成
ofstream myout(“myfile,,ios::out,0); //定义流对象和打开文件
myout << "Write some words in myfile "; //向文件写数据文件的输入 /输出定义流对象与打开文件,注意点例 3:
ofstream myout(“myfile,,ios::out,0); //定义流对象和打开文件
myout << "Write some words in myfile "; //向文件写数据文件的输入 /输出
(1) myfile 是外部文件名,即一个具体的要写入数据的文件。
(2) myout 是程序中使用的流对象名,是 外部文件的逻辑名。
其中,ios::out 表示是输出文件 。
输入文件可定义为,ifstream myin(“myfile”,ios::in,0);
0 表示为一般文件。其他文件类型有:
0,一般文件
1,只读文件
4,系统文件例 4:把一个整数、一个符点数和一个字符串写入文件 test
文件的输入 /输出
#include<iostream.h>
#include<fstream.h> //包含文件输出流
void main( )
{ ofstream myout("test"); //定义用户自己的流对象 myout,以及文件名 test
//这里没有写 ios::out,缺省即为此值
myout << 10 << " " << 123.45 << " " << "object\n"; //向文件写数据
myout.close( ); //关闭文件
}
问题:万一文件打不开怎么办?可不可以输出错误信息?
例 5:把一个整数、一个符点数和一个字符串写入文件 test(修改版)
文件的输入 /输出
#include<iostream.h>
#include<fstream.h> //包含文件输出流
void main( )
{ ofstream myout("test"); //定义用户自己的流对象 myout,以及文件名 test
if( !myout) //判断是否可以打开文件,myout=0为不可以,myout=1为可以
{
cout << "cannot open file,test";
}
myout << 10 << " " << 123.45 << " " << "object\n"; //向文件写数据
myout.close( ); //关闭文件
}
例 6:从文件 test中读入一个整数、一个符点数、一个字符和一个字符串文件的输入 /输出
#include<iostream.h>
#include<fstream.h> //包含文件输出流
void main( )
{ char ch; int a; float b; char *str=new char[80];
ifstream myin("test"); //定义用户自己的流对象 myin,以及文件名 test
if( !myin) //判断是否可以打开文件,myin=0为不可以,myin=1为可以
{
cout << "cannot open file,test"; }
myin >> a >> b >> ch >> str; //从文件中读数据
cout << a << " " << b << " " << ch << " " << str;
myin.close( ); //关闭文件
}
例 7:将文件 file_from 的内容拷贝到文件 file_to 中文件的输入 /输出
#include<iostream.h>
#include<fstream.h> //包含文件输出流
void main( )
{ char ch;
ifstream myin("file_from"); //定义用户自己的流对象 myin,以及文件名 file_from
if( !myin) //判断是否可以打开文件,myin=0为不可以,myin=1为可以
{ cout << "cannot open file,file_from"; }
ofstream myout("file_to"); //定义用户自己的流对象 myout,以及文件名 file_to
if( !myout) //判断是否可以打开文件,myout=0为不可以,myout=1为可以
{ cout << "cannot open file,file_to"; }
while(myin.get(ch) )
myout.put(ch); //向文件读、写数据
myin.close( ); //关闭文件
myout.close( ); //关闭文件 }
文件输入 /输出的控制问题,? 多次读同一文件,每次从头读起,如何完成?
如何指向文件的结尾?
如何知道文件已结束?
文件的输入 /输出解决?语句 myin.seekg(0) 和 myout.seekg(0) 将指向文件的开始 。
方法?myin.seekg(0,ios::end) 和 myout.seekg(0,ios::end) 指向文件结尾
fileName.eof( ) = 0,文件未到结尾
fileName.eof( ) = 1,文件已到结尾例 8:文件 输入中函数 eof( ) 的应用文件的输入 /输出
#include<iostream.h>
#include<fstream.h> //包含文件输出流
void main( )
{ int a;
ifstream myin("file_from"); //定义用户自己的流对象 myin,以及文件名 file_from
if( !myin) //判断是否可以打开文件,myin=0为不可以,myin=1为可以
{ cout << "cannot open file,file_from"; }
while( ! myin.eof( ) )
{ myin >> a ; //从文件中读数据
cout << a << endl;
}
myin.close( ); //关闭文件
}
例 9,seekg( ) 的应用,从文件中读两次数据文件的输入 /输出
#include<iostream.h>
#include<fstream.h> //包含文件输出流
void main( )
{ int a;
ifstream myin("file_from"); //定义用户自己的流对象 myin,以及文件名 file_from
if( !myin) //判断是否可以打开文件,myin=0为不可以,myin=1为可以
{ cout << "cannot open file,file_from"; }
while( ! myin.eof( ) )
{ myin >> a ; //从文件中读数据
cout << a << endl; }
myin.seekg(0); //重新指向文件开头
while( ! myin.eof( ) )
{ myin >> a ; //从文件中读数据
cout << a << endl; }
myin.close( ); } //关闭文件
通过对输入 (?)和输出 (?)运算符的重载,定义特殊的输入 /输出结构
(1) 在程序中包含头文件 fstream.h
(2) 定义流对象,如,ifstream myin; ofstream myout;
(3) 使用 open函数打开文件
(4) 进行文件的读 /写操作
(5) 使用 close函数关闭文件
外部文件名和 逻辑名的区别:
ofstream myout(“myfile,,ios::out,0); //定义流对象和打开文件
(1) myfile 是外部文件名,即一个具体的要写入数据的文件。
(2) myout 是程序中使用的流对象名,是 外部文件的逻辑名。
问题,? 多次读同一文件,每次从头读起,如何完成?
如何指向文件的结尾?
如何知道文件已结束?
1,确定下列输出的结果
1) cout << "12345 " << setw(10) << setfill('$ ') << 10000;
2) cout << setw(8) << setprecision(3) << 1024.987654;
3) cout << oct << 99 << endl << hex << 99;
2,编写一程序实现温度从华氏到摄氏的转换,右端保留小数点两位,要有正负号表示,转换关系为:
celsius = 5.0/9.0 *(fahrenheit - 32),
其中华氏温度从0- 212。