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

在输入流中,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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值