cin与cin.get()区别

前言:

刷题时,由于不用自己搞输入输出,所以正式做企业题时,在输入输出方面总要话多一点时间。说来惭愧,自己连最常见的cin都有点不大了解。尤其是遇到多行输入的情况,处理换行。

废话不多说,上代码:

char p;string str;
int  i = 0;
while(cin>>p)//会自动跳过上面的换行符!
{
    i++;
    // if(p =='\n') break; 注意 cin>>是不会读入换行符的!!!,所以得用 cin.get()!!! 而且是放在while最后一句!!!
    str+=p;
    char pp = cin.get();
    cout<<i<<" p "<<p<<" pp " <<pp<<endl;
    if(pp =='\n') break; //cin.get()会读入换行符,也还会读入空格...
}

cin>> 是会跳过空格和换行符的,而cin.get()会读进来。因此得用cin.get()来判断有没有读到'\n' 换行符(enter键)来退出while。

而且cin>> 与 cin.get()是顺序读取的,举个例子:

输入:

a空格b空格c空格enter键

输出:1 p a pp 

           2 p b pp

           3 p c pp

然后就退不出来了,因为读到 enter键被cin>>略过了,而接着的cin.get()就读不到了,使用就不会break;

如果是这么输入的话 :  a空格b空格center键  // c后面不加空格,直接enter键

才会退出;

当然一般我们都是这么搞退出的

char p;string str;
int  i = 0;
while(cin>>p)//会自动跳过上面的换行符!
{
    i++;
    // if(p =='\n') break; 注意 cin>>是不会读入换行符的!!!,所以得用 cin.get()!!! 而且是放在while最后一句!!!
    str+=p;
    //char pp = cin.get();
    //cout<<i<<" p "<<p<<" pp " <<pp<<endl;
    if(cin.get() =='\n') break; //cin.get()会读入换行符,也还会读入空格...
}

一开始我还以为cin.get()只是读了最后的换行符,其实不是的,它一直在读空格,直到字符后面没空格,直接接换行符时,就break, 所以输入:  a空格b空格center键 就会正常退出了。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值