常用输入方法及流状态

 

我的图文...



原理说明:

cin对象引进了缓冲区的概念,用户的输入先被放进缓冲区(可以直观地理解为一个容器,可流入可流出),然后才根据不同的方法流向变量。

当程序请求从缓冲区流出数据时(例如cin >> a  a是int变量)

1)如果缓冲区还有数据则直接流出,如果没有则等待用户输入

2)如果流状态异常,则不流出数据(相当于堵住容器出口)

各种输入方法:

1)抽取运算符(>>)

抽取运算符能忽略空格,换行符和制表符,并且能智能地提取与目标变量类型相同的内容而将不相容的留在缓冲区

例子:

int a ; cin >> a; //如果你输入“   520u r my world1314”

那么程序只会把520提取给a,因为u与int并不相容,如果接下来还有:

string s; cin >> s;

那么“u”将赋与s,因为u和r之间有空格,所以只提取到u

格式化输入:
配合hex(十六进制),oct(八进制)使用

流状态:

可以使用while(cin >> a)是因为cin返回bool值,当流状态异常返回false(容器出口被堵住),也就是到达文件尾,或者之前的提取没成功,比如cin >> a 你却输入“abc”,此时无法提取到int,导致流异常。 否则,流状态良好则返回true;

2)cin.get(ch)与cin.get()用于输入字符

两者都读取单个字符,而且不放过空格,换行符和制表符(今天的hw会用到)

两者的差别:
因此要一直输入到文件结束,两者写法也不同

while(cin.get(ch) )

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

3)cin.getline() 与 cin.get()输入字符串

cin.get(目标,大小)读取回车前面的不超过指定大小的数据后停止,回车继续留在缓冲区

cin.getline(目标,大小) 读取回车前面的不超过指定大小的数据后停止把回车删除掉

流状态

此处该特别注意,如果缓冲区字符串长度超过指定大小,将返回 false
另外要注意指定大小为4,但是实际为3,是因为‘
’占了一个位置

get()与getline不同还在于如果get没读到任何内容,将返回false,而getline还是true


按下回车立马退出while,因为没读到任何内容,getline则不然


    关注 8ES7服务站


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册