C++中的cin.get()&&cin.getline()
一、cin.get()
#include <iostream>
using namespace std;
int main()
{
//对cin.get()
//单个字符输入
char ch,ch_1;
cin.get(ch);
//因为返回的是对象cin可以这样连续用
cin.get(ch).get(ch_1);
//cin.get()的另外一种用法,就是让它返回字符
ch = cin.get();
//对字符串操作,至少要有两参数
char a[100],a_1[100];
//第一个参数是要输入类型为char* ,第二个是设定输入长度,第三个是终止符
cin.get(a,100);//此时最大有效个数为99(n-1)个字符,默认以换行作为结束符
//如果下一行直接再用如下语句就会有问题
cin.get(a_1,100);
//此时就是在输入完a字符串后按了回车键那么a_1的第一个收到的字符串为'\n'
//就直接结束了,a_1就没有了输入
return 0;
}
而当我对a和a_1的输入使用了终止符,a_1的输入会把a的终止符都进去并且多读入一个换行,虽然此时可以接着输入,但也不是我所期望的结果。如果a和a_1使用了相同的终止符结果会一致。
cin.get(a,100,'*');
cin.get(a,100,'!');
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-elyJJUgJ-1654005440278)(C:\Users\28374\AppData\Roaming\Typora\typora-user-images\image-20220531213608183.png)]
在这里a_1收到的第一个字符是’*‘第二个就是’\n’了。
二、cin.getline()
此时cin.getline()就可以解决问题了
//cin.getline()也有三个参数,第一个为字符指针,第二个为长度,第三个为终止符至少要有两个参数
/*默认终止符为换行符,如果换了终止符就可以输入换行符和制表符之类的了,当然上面的get如果换了终止符,同样也可
以输入换行符,制表符,当然了也会出现上述问题,所以输入字符数组,想要有空格和换行符之类的就用getline()比较好。
*/
cin.getline(a,100,'*');
cin.getline(a_1,100,'*');
//这样子就会满足输入需求了
//如果行输入就不要设定终止符就好了
注意cin.getline()返回的不是cin对象。
三、string类内的geiline()函数
getline()的原型是istream& getline ( istream &is , string &str , char delim );
getline()有三个参数,第一个是cin,第二个定义的字符串类的实例对象,第三个是终止符默认为’\n’。
#include <iostream>
#include <string>
using namespace std;
int mian()
{
string a;
getline(cin,a);
//可以获取一行字符串
getline(cin,a,'*');
return 0;
}