c++ I/0标准库

来源:互联网 发布:开设大数据专业的学校 编辑:程序博客网 时间:2024/06/06 20:39

(1)转义字符

\n 换行,移到下一行开头,ASII码是10,c++在windows下按Enter键实际上就是这个输入。

\r回车,将移到当前行的开头

\t水平制表

\0 空字符(NULL)

EOF 文件结束符,-1 是让cin变为bad()状态而已,windows下一般采用阻塞式检查ctr+z, Unix下一般是非阻塞式的检查Ctr+d,

标准IO库

Cin表示读入标准输入的istream对象.

Cout表示写入标准输出的ostream对象

Cerr表示输出标准错误的ostream对象,常用于程序错误信息。

>>操作符,用于从istream对象中读入输入

<<操作符,用于把输出写到ostream对象中。

 

 

(2)

Iostream定义读写控制窗口的类型,fstream定义读写文件的类型,sstream定义的类型用于读写存储在内存中的string对象。

(一)输出流

一个ostream是一种能将不同类型的值转换为字符序列的机制,这些字符随后通过低级的输出操作输出来。存在着许多不同的字符,它们的特征由char_traits描述,因此,一个ostream是通用的basic_ostream模板针对一种特定字符的专门化。

 Typedefbasic_ostream<char>  ostream

 

标准输出流

Ostream cout   // char的标准输出流

Ostream cerr   //用于错误信息的标准非缓冲输出流

Ostream clog  //用于错误信息的标准缓冲输出流

(1)      上述输出流(istream,ifstream,istringstream)提供的输出方法:

 

(2)      处理内部类型的输出运算符<<

用于:int类型,float,bool,const void*

对于char和char * 可以通过下述put和write来实现<<操作符,为非成员函数

(3)      put(Ch c)

用于:字符,输出字符c

(4)      write(const Ch* p,streamsize n)

用于:字符串输出,n为指定长度

 

输入流

Typedef basic_istream<char>  istream;

Istreamcin;

(2)上述输入流(ostream,ofstream,ostringstream)提供的输入方法:

   (1)处理内部类型的输入操作符>>

用于:int类型,float,bool,const void*

     注意:>>跳过空白,取下面非空白输入,空白定义为标准的C空白(空格,制表符,换行符,换页符,回车符,),只有输入中的非需要类型将导致输入操作失败并结束输入循环。

对于输入char类型,>>运算符照样跳过空白,而字符数组先跳过空白,而后不断将字符读入它们的数组参数里,直到又遇到空白或者文件结束符。最后用一个0结束这个字符串。

(2)针对字符的输入操作

    Streamsize  gcount()由上一次get()读入的字符个数

    Int_type get()  读一个字符,是c语言中的getchar()的版本,

     get(Ch& c) 读一个字符到c中

     get(ch* p,streamsize n)以换行符作为结束符读取一个字符串到 p中

     get(ch* p,streamsize n,Ch term)  以term作为结束符读取一个字符串到 p中

     getline(Ch*p,streamsize n)以换行符作为结束符读取一个字符串到 p中

  getline(ch* p,streamsize n,Ch term)  以term作为结束符读取一个字符串到 p中

 

  ignore(streamsizen=1,int_type t=Tr::eof());

  read(Ch*p, streamsizen)  读入至多n个字符。

 

 

注意:get和getline函数对空白字符的处理与对其他字符完全一样,不会跳过空白,这些函数只是用于输入操作,对于输入的字符的意义并没有任何假定。

 Get和getline输入字符数组时候,当streamsizen将至多n-1个字符读入,最后一个放0.或者遇到结束符,结束输入。

Get和getling 区别:get()如果输入中遇到结束符,这个字符将作为第一个未读的字符留到流中,如果还需要调用get(),需要删除该结束符,否则get()得到的结果为0.而getline()如果遇到结束符,将该结束字符自动删除,所以接下来调用getline就会得到后面的字符串。

 

read将最多n个字符读入,不依赖于结束符,也不会再其目标的最后放结束符0,它只是简单的读入字符,而不是试图将其目标作为C风格字符串。

ignore像read一样读字符,并且丢弃,读n个字符;默认为1个。Ignore也可以用一个结束符,在读入中遇到这个结束符时候,就将它从输入流中删除。cin.ignore(a,ch)方法是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到a或者被抛弃的字符是ch,则cin.ignore()函数执行终止;否则,它继续等待。它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。
 
 
 
文件的输入和输出(ifstreamofstreamfstream
fstream除了继承上面的输入和输出外,还定义了openclose。以及形参为要打开的文件名的构造函数。
Open函数将已存在的fstream对象与特定文件绑定,close函数是关闭现有与fstream绑定的文件,然后才可以open另一个文件。
如果程序需要重用文件流fstream读写多个文件,必须在读另一文件之前调用close解除原文件关联,和clear清除该流的状态。
文件模式
In 打开文件做读操作,默认ifstream操作
Out 打开文件做写操作,默认ofstream操作
App 在每次写之前找到文件尾部
Ate 将文件定位到文件尾
Trunc 打开文件时清空已存在的文件流
Binary 以二进制模式进行IO操作
只要调用open函数,就要设置文件模式,其模式的设置可以是显示的也可以是默认的。
 
 
字符串流(istringstreamostringstreamstringstream
头文件sstream
sstream除了继承上面的输入和输出外,还定义了一个有string形参的构造函数,以及str()的成员函数。
Stringstream  strm(s) 创建存储s的副本的stringstream对象,其中sstring类型的对象
Strm.str() 返回strm中存储的string类型的对象
Strm.str(s) string类型的s复制给strm,返回void

 

流状态

Good () 操作成功, eof() 遇到文件结束  fail() 操作失败  bad()流被破坏,

如果将一个流当作条件使用,这个流的状态就会通过operator void*()或者operator!()检测。

在不能直接转换为bool型的情况下,会试图先进行void*)操作,这个操作会直接调用成员函数operator void*(),这个函数返回一个void*返回值

 

 

对于string对象

提供了重载输入操作符>>,输出操作符<<,getline,

<<操作符将一个串写入一个ostream>>运算符将一个以空格结束的完整的字读入到对应字符串中,并在必要时候为保存这个字儿扩充字符串,开头的空格将被跳过,结束处的空白字符也不放进字符串中,

Getling函数将由eol结束的一个完整行读入它的字符串,默认下以换行符’\n’作为结束符。这个行结束符被从流中去除,但也不放入串中,

0 0
原创粉丝点击