流类库与输入输出

I/O流的概念

当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的对象,另一个是文件对象。

流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动。

程序建立一个流对象,并指定这个流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。

 

输出流

最重要的三个输出流是

ostream:通用输出流类和其他输出流的基类

(预先定义的对象 cout 、 cerr 、 clog用来完成向标准设备的输出 )

ofstream:文件输出流类

ostringstream:字符串输出流类

 

输出流对象

如果仅使用预先定义的cout 、 cerr 或 clog对象,就不需要构造一个输出流。如果要使用文件流将信息输出到文件,便需要使用构造函数来建立流对象。

构造文件输出流的常用方法如下:

1)可以在调用默认构造函数之后使用open成员函数打开文件

ofstream myFile; //声明一个静态文件输出流对象

myFile.open(filename);    
  //打开文件,使流对象与文件建立联系

2)在调用构造函数时指定文件名,该文件是自动打开的

ofstream myFile("filename");

3)也可以使用同一个流先后打开不同的文件(在同一个时刻只有一个是打开的)

ofstream file; //声明一个静态文件输出流对象

file.open(FILE1);//打开文件FILE1

//……向文件FILE1输出

file.close();//关闭文件FILE1

file.open(FILE2);//打开文件FILE2

//……向文件FILE2输出

file.close();//关闭文件FILE2

//当对象file离开它的作用域时便消亡

 

插入运算符(<<):

插入(<<)运算符是所有标准C++数据类型预先设计的。

用于传送字节到一个输出流对象。

 

控制输出格式:

控制输出宽度

为了调整输出,可以通过在流中放入setw操纵符或调用width成员函数为每个项指定输出宽度。

11-1 使用width控制输出宽度

#include   

using namesoace std;

void main()   

{ double values[] = {1.23,35.36,653.7,4358.24};

  for(int i=0;i<4;i++)

  { cout.width(10);//调用width函数

    cout << values[i] <<'\n';

  }

}

例:使用*填充

     空格是默认的填充符,使用fill成员函数可以为已经指定宽度的域设置填充字符。

#include  

using namespace std;

void main()   

{ double values[]={1.23,35.36,653.7,4358.24};

  for(int i=0; i<4; i++)

  {  cout.width(10);

     cout.fill('*');

     cout<<values[i]<<'\n';   

  }

}

 

输出文件流成员函数

open函数

把流与一个特定的磁盘文件关联起来。

需要指定打开模式。

put函数

把一个字符写到输出流中。

write函数

把内存中的一块内容写到一个输出文件流中

seekptellp函数

操作文件流的内部指针

close函数

关闭与一个输出文件流关联的磁盘文件

错误处理函数

在写到一个流时进行错误处理

 

向文件输出:

#include

using namespace std;

struct Date

{     int mo,da,yr;  };

void main()  

{

    Date dt = {6,10,92};

    ofstream tfile("date.dat",ios_base::binary);//打开文件

    tfile.write((char *) &dt,sizeof (dt)) ;

    tfile.close();//关闭文件

}

 

输入流:

重要的输入流类:

istream类最适合用于顺序文本模式输入。
cin是其派生类istream_withassign的对象。

ifstream类支持磁盘文件输入。

istringstream字符串输入流

 

输入流对象:

如果在构造函数中指定一个文件名,在构造该对象时该文件便自动打开。

Ifstream myFile("filename");

在调用缺省构造函数之后使用open函数来打开文件。

I fstream myFile;//建立一个文件流对象

myFile.open("filename");     
          //打开文件"filename"

 

提取运算符(>>):

提取运算符(>>)对于所有标准C++数据类型都是预先设计好的。

是从一个输入流对象获取字节最容易的方法。


输入流成员函数:

open函数把该流与一个特定磁盘文件相关联。

get函数的功能与提取运算符(>>)很相像,主要的不同点是get函数在读入数据时包括空白字符。

getline的功能是从输入流中读取多个字符,并且允许指定输入终止字符,读取完成后,从读取的内容中删除终止字符。

read成员函数从一个文件读字节到一个指定的内存区域,由长度参数确定要读的字节数。
如果给出长度参数,当遇到文件结束或者在文本模式文件中遇到文件结束标记字符时结束读取。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,根据您的要求,我设计了一个随机点名的小程序,使用了C++类库输入输出。以下是程序的代码: ```cpp #include <iostream> #include <fstream> #include <vector> #include <string> #include <cstdlib> #include <ctime> using namespace std; class RandomNameSelector { public: RandomNameSelector(const string& filename) { ifstream infile(filename); if (!infile) { cerr << "Error opening file: " << filename << endl; exit(1); } string name; while (infile >> name) { names_.push_back(name); } infile.close(); } void selectWinner() { if (names_.empty()) { cout << "No names found!" << endl; return; } srand(time(NULL)); int index = rand() % names_.size(); cout << "The winner is: " << names_[index] << endl; } private: vector<string> names_; }; int main() { RandomNameSelector selector("names.txt"); selector.selectWinner(); return 0; } ``` 这个程序通过类`RandomNameSelector`实现随机点名的功能。在构造函数中,它从指定的文件中读取名字列表,并保存到`vector<string>`类型的私有成员变量`names_`中。在`selectWinner()`函数中,它使用`rand()`函数生成一个随机数,根据这个随机数从`names_`中选择一个名字作为获奖者。注意,程序使用了`srand(time(NULL))`语句来初始化随机数生成器,以保证每次运行程序时都能得到不同的结果。 在`main()`函数中,程序创建了一个`RandomNameSelector`对象,并调用`selectWinner()`函数进行随机点名。注意,程序要求名字列表保存在`names.txt`文件中,您需要在程序运行前准备好这个文件,并确保文件中每行只包含一个名字。 希望这个程序能够满足您的要求!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值