个人笔记(cin.getline与cin.get)

来源:互联网 发布:mac开发人工智能软件 编辑:程序博客网 时间:2024/05/22 01:49

在输入流中,getline与get是两个比较早接触的function member;

在primer plus中,介绍这两个函数时,是通过例子:

// instr1.cpp -- reading more than one string#include <iostream>int main(){using namespace std;const int ArSize = 20;char name[ArSize];char dessert[ArSize];cout << "Enter your name:\n";cin >> name;cout << "Enter your favorite dessert:\n";cin >> dessert;cout << "I have some delicious " << dessert;cout << " for you, " << name << ".\n";return 0;}

由于字符串里空格的存在,导致单单一个cin已经无法满足输入的需求了,于是引出并开始学习getline(),get()

      cin.get()一个line-oriented的输入的好帮手,它会读取行的字符串,在读取之后字符串的结束标记'\0'被自动添加到最后(size足够情况下),而触发输入完成的enter键位,则被放入输入队列,容易被下一个有用的输入语句所读取,这时可以使用cin.get(xxx).get(xxx)的连用来消除此语句带来的不良反应,get在读取空语句时(既不输入任何一个字符便回车完成)会有一个failbit来关闭以后的输入。在读取超过字符数组限制的时候,不会设置一个failbit来阻止后续的输入。

      cin.getline()跟上面的函数大致相同,但是它在输入之后会将enter键所带来的效果转换为'\0'存储到数组最后,而不加这个enter放置在输入队列,也即是丢弃了这个enter,这个设定就大大减少了因为忘记处理上一行语句预留的东西而给下面的输入带来错误的情况,但一个东西的优点往往也就是他的缺点,正因为他在输入之后不释放不发出任何信号,我们也就是不知道它(字符数组)的大小是否是足够容纳我们刚刚所输入的字符串,而get则很好区别我们输入的是否是正确的,可以用if((ch=get.ch())!='\n')来判定我们刚才是正确输入所有的字符,还是超载了字符数以致于有些没有录入。同时getline在读取一个空行时,不会设置一个failbit来阻止后续的输入,但是在满载的时候而我们仍在继续输入时,则会设置一个failbit来关闭后续的输入(用cin.get()放在一个cin.getline(xxx,xxx)后面,运行程序并且输入一个大于字符数组容量的字符串,getline在设置failbit之后释放一个信息被cin.get()获取,用int输出此信息为的值-1,而不是过度输入后的不在字符数组里的第一个字符,而get正好与他相反)


两者在不同的情况设置failbit,但两者解决failbit的办法都相同,那就是在两者的语句后写上 cin.clear(),即可取消失效点,开启后续的输出,



0 0
原创粉丝点击