C++中 I/O流总结

程序的输入是指把输入文件数据传送给程序,程序的输出是指从程序中把输出结果传送给输出文件。C++中输入输出大致上有以下三种:

1)标准I/O------对系统指定的标准设备的输入输出。(eg:从键盘输入数据,输出至显示器屏幕)

2)文件I/O------以外存磁盘(光盘等)文件为对象进行输入输出(eg:从磁盘文件读取数据,经处理后,数据输出到磁盘文件)。

3)串I/O(又称字符串输入输出)-------对内存中指定的空间进行输入输出(通常指定一个字符数组作为存储空间)


输入输是数据传送的过程,C++称之为流(stream),在C++中,流被定义成类,成为流类(stream class),其定义的对象成为流对象。

当数据传送时,会在内存中会为每一个数据流开辟一个缓冲区用来存放数据流中的数据。

输出时,当用cout和“《”向显示器输出数据时,会先将数据送到缓冲区中保存,直到遇到endl或者缓冲区满了,就将缓冲区的全部数据送到显示器中显示出来。

输入时,从键盘输入的数据先放在键盘的缓冲区中,按下enter键后,数据会输入到程序的缓冲区中,形成cin流。用cin和“》”从程序缓冲区中提取数据给程序中的相关变量。

(注:cin&cout不是C++定义的提供的语言,它们是iostream类定义的对象)


C++编译系统提供了用于输入输出的iostream类。 下面是一些I/O库中常用的流类


 一、标准I/O

标准输入流 cin,标准输出流cout,cerr(console error),clog(console log)。其中cin是istream的派生类istream_withassign的对象,它是从标准输入设备(键盘)输入到内存里去的数据流,cout,cerr,clog是ostream派生类ostraem_withassign的对象,它是从内存输入到标准设备的数据流。(系统在定义cout时就已经将它与标准的输出设备相关联了)

cout流通常是传送到显示器输出,但是也可以被重定向输出到磁盘文件,而cerr流中的信息只能在显示器输出(调试程序过程中会,往往不希望程序运行的出错信息被送到其他文件,而是要及时在显示器上输出,这是就可以用cerr)。clog(console log)流对象也是标准出错流,它的作用与cerr相同,他们之间只有一个小的区别:cerr是不经过缓冲区,直接向显示器输出有关的出错信息,而clog中的信息存放在缓冲区中,缓冲区满了或遇到endl时向显示器输出。

cout与cin既然是iostream类的派生类的对象,那么就可能存在流成员函数供他们调用。下面介绍两个函数

用流成员函数put输出字符

eg:  cout.put('a')//调用函数的结果是在屏幕上显示一个字符‘a’;

put函数的参数可以是字符或者是字符对应的ASCII码;

eg:  cout.put(97);       //输出‘a’

instance:

<span style="font-size:18px;">    char* ch="BASIC"
    for(int i=4;i>=0;i++)
       cout.put(*(ch+i);//用putchar(*(ch+i));也可以  (putchar()函数引自于C,C++保留了这个函数,在iostream.h中定义)
    cout.put('\n');</span>
输出结果为CISAB;

用于字符输入的流成员函数get

流对象成员函数get()有三种调用形式:无参数,一个参数,和3个参数。

1、不带参数形式的调用

    cin.get()//用于从指定的输如流中取一个字符(包括空白字符),当遇到文件结束符时,返回EOF。

2、有一个参数

   cin.get(ch)//用于从指定的输如流中取一个字符(包括空白字符),并将其值赋给ch。

3、有三个参数

   cin.get(字符数组,字符个数n,终止字符)  or cin。get(字符指针,字符个数n,终止字符)

其作用是从输入流中取n-1个字符到指定的字符数组中去,遇到终止字符则终止操作,读取成功返回非0值,失败则返回0;

用成员函数getline读入一行字符

istream& getline( char*pch, intnCount, chardelim= '\n' );

        istream& getline( unsigned char* puch, intnCount, chardelim= '\n' );

        istream& getline( signed char*psch, intnCount, chardelim= '\n' );

下面以一个实例来说明其用法:
<span style="font-size:18px;">#include<iostream>
using namespace std;
int main(){
	char ch[20];
	cin>>ch;
	cout<<"The stream read with cin is:"<<ch<<endl;
	cin.getline(ch,20,'/');
	cout<<"Teh second part is:"<<ch<<endl;
	cin.getline(ch,20,'/');
	cout<<"The third part is:"<<ch<<endl;
//	system("pause");
	return 0;
}</span>
输入例句为I like C++./I study C++./I am happy

结果是:

将程序中的cin.getline()函数调用改为cin.get(ch,20,'/');

结果是:


从上面例子可以推出:

getline函数遇到终止符时结束,指针移到该终止标志字符之后。

get函数遇到终止符时结束,指针仍指向该终止标志字符。

因此使用get函数时应当注意,必要时用其他方法跳过终止字符(如使用ignore函数跳过终止字符)

   istream& ignore( int nCount= 1, intdelim= EOF );





  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值