C++中cin.get()和cin.getline()的用法以及区别

今天在学习C++的时候对getline()函数和get()函数有点蒙,特地去找了些资料,加上自己上机实验了一些,整理了一些二者的区别。

首先二者都是可以从输入流中获得字符,get()函数可以不设置参数,如char ch=cin.get();

也可以设置一个参数,这个参数为一个字符变量例如char ch;
cin.get(ch);//表示把从输入流中得到的字符赋值给ch变量 。

上面这两个用法与c语言中的getchar()相似,这里不做赘述。

下面来说一下 get()函数 带两个参数或者三个参数的用法,两个参数时调用形式为:

cin.get(指针名或数组名,获得字符的数量);

表示把获得的字符付给该数组或字符指针,例如:

`char ch[20];

cin.get(ch,15);`//把字符串赋值给数组,并在结尾加一个’\0’;

三个参数的用法与两个参数的用法相似,只不过多了一个参数终止字符;调用形式为cin.get(指针名或数组名,字符个数,终止字符);例如:


char ch[20];

cin.get(ch,15,'/');



表示把从输入流中获得的15个字符赋给ch数组,如果这期间遇到了终止字符’/’,则只把终止字符前面的字符赋值给数组。

getline()函数调用形式与get()函数的后两种用法相似,即也是从输入流中获得指定长度字符,赋值给数组或字符指针。

那二者的区别在于哪呢?先上一段代码


#include"iostream"
using namespace std;

int main()

{

    char ch[20];

    char *pt = ch;//指针指向该数组

    cin.getline(pt,15,'/');//注意结尾会自动加'\0'

    cout<< "the first part is:" << pt << endl;
    cin.getline(pt,15, '/');

    cout<< "the second part is:" << pt << endl;

    system("pause");

    return 0;

}

上面这段代码很简单,我们来试验一下,输入 I am a boy,/I am a girl./ 时会是什么样子呢?
运行结果
可以看到,遇到了终止字符就停止录入字符了,下面我们再换成cin.get()函数试试呢;
代码如下



#include"iostream"
using namespace std;
int main()

{

    char ch[20];

    char *pt = ch;//指针指向该数组

    cin.get(pt,15,'/');//注意结尾会自动加'\0'

    cout<< "the first part is:" << pt << endl;
    cin.get(pt,15, '/');
    cout<< "the second part is:" << pt << endl;

    system("pause");

    return 0;

}


同样输入 I am a boy,/I am a girl./ 来运行一下试试,结果:
运行结果
我们发现第二部分没有输出结果,这是怎么回事呢,为了弄清楚后面的字符串是不是还在,我修改了一下代码,如下:



#include"include.h"

int main()

{

    char ch[20];

    char *pt = ch;

    string str;

    cin.get(pt,15,'/');

    cout<< "the first part is:" << pt << endl;

    cin>> str;
    cout<< str << endl;
    cin>> str;
    cout<< str << endl;
    cin>> str;
    cout<< str << endl;
    cin>> str;
    cout<< str << endl;
    //cin.get(pt, 15, '/');
    //cout << "the second part is:" <<pt << endl;
    system("pause");
    return 0;

}


把原来代码中后面的get()函数改成了 cin>>str;cout<<str<<endl; ,结果发现运行结果为
在这里插入图片描述

结果很明显,也就是说前面get()函数录入到终止字符后, 控制输入流的指针指在了终止字符,
所以之后用cin>>str会把/也一同录入,而getline函数没有这种现象是因为getline函数运行遇到终止字符后指针位置在终止字符后面;验证很简单,只要执行第一个get()函数之后用一个cin.ignore()函数向后跳个字符,此时使用第二个get()函数就正常了。

以上便是二者的一个很重要的区别了。
还有,get()函数在输入数组超界时会把后面的字符仍然放在输入流中,而getline函数()则会舍弃掉后面的字符,如果读者有兴趣可以自行运行一下试试。

抖个机灵,有说错的地方欢迎各位大佬指正,溜了。。。。。。。

  • 12
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值