读书人

把c++的输入输出拾掇

发布时间: 2013-01-05 15:20:39 作者: rapoo

把c++的输入输出整理

一直对这个输入输出有了解,但是不是特别的清楚,毕竟混乱是一切忧虑的根源!

比较晚了,没有怎么仔细检查,如果有错误请大家见谅。。。

1.>>

跳过了空格制表符和换行,也就是说 12 13 14 15 cin>>a;

会直接读取12,然后跳过空格,直接来到13

2.cin.get(char&)

不跳过空格等,并且返回调用它的isteream的引用(注意,当到达文件尾的时候,返回false,因此可用来判断是否到达文件尾)



3.cin.get(void)

和cin.get(char&)类似,同样不跳过空格等,但是以返回值的形式将输入传递给程序(注意它的返回类型为整型,但是到达文件尾时返回EOF)

什么是EOF?

(1)

计算机术语,缩写通常为EOF(End Of File),在操作系统中表示资料源无更多的资料可读取。

(2)

在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志

(3)

C语言中,当把数据以二进制形式存放到文件中时,就会有-1值的出现,此时不能采用EOF作为二进制文件的结束标志



因此,我们经常犯的一个致命错误就是:使用char型来接收cin.get()的返回值。

因为当读取到文件尾时,返回EOF(也就是-1),就会导致错误。

详细介绍可参考这篇文章第四点:http://blog.csdn.net/deh_1984/article/details/2611310



4. istream& get(char *,int ,char)
istream& get(char*,int)
istream& getline(char*,int ,char)
istream& getline(char*,int)

都是读取一行,直到最大数目(比如,cin.get(c,10),则最大数为9,当读到第9个后,停止读取)或者遇到换行符(默认为'\n')

他们的主要区别在于:

get()将换行符(默认)留在输入流中,接下来读取到的将是换行符

getline()会抽取换行符(默认),并且将输入流中的换行符丢弃(因此,我们常常这么用 cin.get(pl,size).get();后面那个get用来读取换行符


但是我们需要特别注意下意外字符的输入:


(1)输入的字符数超出限定的大小

get(str,Size):读取Size-1个字符,并将str[Size-1]置为'\0',然后将剩余字符(包括'\n')留在输入缓冲区中,这些字符将被下一个读取输入的操作捕获,影响该输入处理;

getline(str,Size):读取Size-1个字符,并将str[Size-1]置为'\0',剩余字符(包括'\n')留在输入缓冲区中,随即设置cin失效位(即if(!cin)的判断为真),关闭输入。其后的所有输入都无法得到任何东西,当然也无法得到输入缓冲区中剩余的字符串。但如果用clear()重置cin,其后的输入便可用并会得到遗留在输入缓冲区中的字符。


(2)输入一个空行(即直接回车)

get(str,Size):str将得到'\0'(注意区别于空格),并设置cin实效位,关闭输入,但回车依然留在输入缓冲区中,因此如果我们用clear()重置cin,其下一个读取输入的操作将捕获'\n';

cin.get(char*,int)的常用代码:



未完待续中.....



读书人网 >C++

热点推荐