您的位置:首页 > 编程语言 > C语言/C++

c++primer plus第十七章-cin输入、cout输出和文件I/O

2015-10-06 21:21 447 查看
c++primer plus第十七章-cin输入、cout输出和文件I/O
1)流状态

eofbit:如果到达文件尾,则设置为1;

badbit:如果流被破坏,则设置为1;例如,文件读取错误;

failbit:如果输入操作未能读取预期的字符或输出操作没有写入预期的字符,则设置为1;

goodbit:另一种表示0的方法;

good():如果流可以使用(所有的位都被清除),则返回true;

eof():如果eofbit被设置,则返回true;

bad():如果badbit被设置,则返回true;

fail():如果badbit()或failbad()被设置,则返回true;

rdstate():返回流状态;

exceptions(isostate ex):设置哪些状态将导致clear()引发异常;例如,如果ex是eofbit,则如果eofbit被设置,clear()将引起异常;

clear(iostate s):将流状态设置为s;s的默认值为0(goodbit);如果(restate()&exceptions())!=0,则引发异常basic_ios::failure;

setstate(iostate s)调用clear(rdstate()|s)。这将设置与s中设置的位对应的流状态位,其他流状态位保持不变。

2)单字符输入

在使用char参数或没有参数的情况下,get()方法读取下一个输入字符,即使该字符是空格、制表符或换行符。get(char &ch)版本将输入字符赋给其参数,而get(void)版本将输入字符转换为整形(通常是int),并将其返回。

第一:成员函数get(char &)

char ch;

cin.get(ch);

如果cin.get(char &)到达文件尾,无论是真正的文件尾,还是通过键盘仿真的文件尾(对于DOS和Windows命令提示符模式,为按下ctrl+z;对于UNIX,是在行首按下ctrl+d),它都不会给其参数赋值。这是完全正确的,因为如果程序到达文件尾,就没有值可供赋给参数了。

char ch;

while(cin.get(ch))

{... ...}

第二:成员函数get(void)

get(void)成员函数还读取空白,但使用返回值来将输入传递给程序。

到达文件尾后(不管是真正的文件尾还是模拟的文件尾),cin.get(void)都将返回值EOF-头文件iostream提供的一个符号常量。这种设计特性使得可以这样来读取输入:

int ch;

while( ( ch=cin.get() ) !=EOF )

{... ...}

这里应将ch的类型声明为int,而不是char,因为值EOF可能无法使用char类型来表示;

3)cin.get(ch)和cin.get()的区别

特征 cin.get(ch) cin.get()

传输输入字符的方法 赋给参数ch 将函数返回值赋给ch

字符输入时函数的返回值 指向istream对象的引用 字符编码(int值)

达到文件尾时函数的返回值 转换为false EOF

4)istream &get(char *,int, char);

istream &get(char *,int);

istream &getline(char *,int, char);

istream &getline(char *,int);

第一个参数是用于放置输入字符串的内存单元的地址。第二个参数比要读取的最大字符数大1(额外的一个字符用于存储结尾的空字符,以便将输入存储为一个字符串)。第3个参数指定用作分界符的字符,只有两个参数的版本将换行符用作分界符。上述函数都在读取最大数目的字符或遇到换行符后为止。

get()和getline()的最大区别在于:get()将换行符留在输入流中,这样接下来的输入操作首先看到的是换行符;而getline()抽取并丢弃输入流中的换行符。

5)成员函数ignore()

原型:istream &ignore(int =1, int = EOF);

该函数接受两个参数,第一个是数字,指定要读取的最大字符数;第二个是字符,用作分界符。

默认参数值EOF导致ingore()读取指定数目的字符或读取到文件尾。

6)其他istream方法

第一:read()函数读取指定数目的字节,并将它们存储在指定的位置中。

char gross[144];

cin.read(gross,144);

read()不会在输入后加上空值字符,因此不能将输入转换为字符串。

第二:peek()函数返回输入中的下一个字符,但不能抽取输入流中的字符。也就是说,它使得能够查看下一个字符。假设要读取输入,直到遇到换行符或句点,则可以用peek()查看输入流中的下一个字符,以此来判断是否继续读取。

第三:gcount()方法返回最后一个非格式化抽取方法读取的字符数。这意味着字符是由get()、getline()、ignore()和read()方法读取的,不是由抽取运算符(>>)读取的,抽取运算符对输入进行格式化,使之与特定的数据类型匹配。

第四:putback()函数将一个字符插入到输入字符串中,被插入的字符将是下一条输入语句读取的第一个字符。putback()方法接受一个char参数--要插入的字符,其返回类型为istream&,这使得可以将该函数调用与其他istream方法拼接起来。使用peek()的效果相当于先使用get()读取一个字符,然后使用putback()将该字符放回到输入流中,然而,putback()允许将字符放到不是刚才读取的位置。

7)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: