14.5.6 其他istream方法

    除了get函数和getline函数之外,istream类中还定义了ignore、read、peek、gcount和putback等成员函数,本节简要地介绍它们的用法。

    1.ignore函数

    其基本调用形式如下所示。


    istream&istream:ignore(int n=1,int delim=EOF);

    ignore函数从输入流中抽取一定数目的字符丢弃,停止的条件有两个,一是达到n个字符;二是碰到分隔符delim。两个条件只要有一个满足即停止,分隔符同样从输入流中抽取出来。如以下示例代码14.22所示。

    代码14.22 istream类中ignore函数的用法IstreamIgnore


    <————————————-文件名:example1422.cpp——————————————-> 01 #include<iostream> 02 using namespace std; 03 const int Len=10;//长度为10 04 int main() 05 { 06 char buf[Len]; 07 cin. ignore(5,'Z');//从输入流中提取一段,丢掉 08 cin. getline(buf,Len); 09 cout<<buf<<endl; 10 return 0; 11 }

    输出结果如下所示。


    ABCDEFGHIJKLMNOPQRST(注:键盘输入) FGHIJKLMN或 XYZABCDEFGHIJKLMN(注:键盘输入) ABCDEFGHI

    【代码解析】代码第7行语句“cin.ignore(5,'Z');”用以从输入流中抽取一定数目的字符并抛弃,当用户输入“ABCDEFGHIJKLMNOPQRST”时,因前5个字符中不含'Z',因此,前5个字符都被抽取出并抛弃,所以b u f为“F G H I J K L M N”,但当用户输入“XYZABCDEFGHIJKLMN”时,第3个字符是‘Z’,因此,ignore函数只会将前3个字符“XYZ”抽取并抛弃,此时的buf为“ABCDEFGHI”。

    2.read函数

    其基本调用形式如下所示。


    istream&istream:read(char*buf,int n);

    该函数读取n个字符到buf中,与getline和get函数不同的是,read函数不会在输入后加入空字符'\0',因此不能将buf转换为字符串。

    实际上,istream类中read函数是和ostream类中定义的write函数搭配使用的。

    3.peek函数

    其基本调用格式如下所示。


    int istream:peek();

    该函数返回输入流中下一个字符的int值,但不将其从输入流中抽取出来。

    4.gcount函数

    其基本调用格式如下所示。


    int istream:gcount()

    该函数返回最后一个非格式化抽取方法读取的字符数,这意味着字符是由get函数、getline函数、ignore函数和read函数读取的,而不是使用>>读取的,因为>>对输入进行了格式化,使之与特定的数据类型相匹配。

    5.putback函数

    其基本调用格式如下所示。


    istream&istream:putback(char);

    该函数将一个字符插入到输入缓冲区的头部(下一个要取的位置上),并返回istream类对象的引用,实际上peek函数相当于是先用get函数读取一个字符,再将该字符putback回去。

    说明

    istream类中还定义了其他成员函数,本节不再逐个介绍,感兴趣的读者可查阅相关资料。