在学习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);