《C++ Primer Plus》学习笔记——函数getline()和函数get()

在学习C++的时候,如果只是输入一个字符:

char str;
cin>>str;

如果要输入一个字符串:

const int Size=10;
char str[Size];
cin>>str;

上面这种方式会在我们需要输入这样的字符串(“I am from China!”)时遇到问题。因为cin使用空白(空格、制表符、换行)来确定字符串的结束位置。所以如果要读入这样包含空格的字符串就需要使用到getline()函数或get()函数。
那么这两个函数有什么区别呢?
getline()函数和get()函数都是面向行的输入即一次读入一行字符串。两者都以换行符作为字符串的结束位置。不同点在于:getline()会将换行符读入字符串,最后用空字符’\0‘替换,而get()函数会把换行符留在输入队列当中。
getline()的用法:比如要向字符数组name中输入19个字符,则可以这样使用

char name[20];
cin.getline(name,20);

注意:getline()还有第三个参数,这里不做介绍。
get()的用法:

char name[20];
//第一种
cin.get(name,20);
//第二种
cin.get();

第一种,将读取的字符串赋给name,第二种只是读入字符串。
情况1:

char name[20];
char address[20];
cin.getline(name,20);
cin.getline(address,20);
cout<<name<<endl;
cout<<address;

运行结果:(加粗表示输入)
zhang san
Bei jing

zhang san
Bei jing
情况2:

char name[20];
char address[20];
cin.get(name,20);
cin.get(address,20);
cout<<name<<endl;
cout<<address;

运行结果:
zhang san
zhang san

从上面能出,并没有给你输入Bei jing 的机会,这是因为在我们输入Zhang san后需要按下Enter输入换行符,表示该字符串结束了。此时换行符被留在了输入队列。cin.get(address,20);遇到换行符直接就结束了字符串的读取。**这时候换行符还是被留在了输入队列。**所以,不管你后面有多少个get(argument1,argument2)都无法获取字符串。
情况3:

char name[20];
char address[20];
cin.get(name,20);
cin.get();
cin.get(address,20);
cout<<name<<endl;
cout<<address;

运行结果:
zhang san
Bei jing

zhang san
Bei jing
在中间加上函数get()的无参数调用即可。
从上面的分析,我想你应该理解了getline()和get()的细微区别了。
在实际编程中,你还可能遇到整数类型和字符串的混合输入。如下:

int Int;
char str[10];
cin>>Int;
cin.get()//这句话一定不能省略。
cin.get(str,10);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值