cin.get带三个参数的用法:
char s[20];
cin.get(s,20,'m'); //最后一个参数可采用默认值'\n',用法cin.get(s,20)
此句从输入流中提取字符给s,第二个参数表示数组大小,第三个参数是终止字符(默认参数值'\n')。
函数遇到以下任何一个条件都会终止:
1.当输入流中提取到字符'm';
2.已从输入流中提取了(20-1)个字符。
cin.getline(s,20,'m');用法同cin.get()函数一样!不同的是,getline函数遇到终止符'm'时,会将'm'从输入流中删除。
结合代码理解:
#include<iostream>
using namespace std;
int main()
{
char s1[20],s2[20];
cout<<"Enter a sentence:\n";
cin.getline(s1,20,'m');//先执行getline,再执行get。
cout<<"The string read with cin.getline was:\n"
<<buffer2<<endl;//getline遇到'm'结束时,会删除输入流中的'm'.
cin.get(s2,20,'m');
cout<<"The string read with cin.getline was: \n"
<<buffer1<<endl;
return 0;
}
运行结果:
第一个字符'm'在getline执行后被删除,cin.get照常执行,得到buffer2(第一个'm'之后,第二个'm'之前的字符)。
将代码中cin.get和cin.getline两个函数对调,改变执行顺序,执行结果发生改变。
#include<iostream>
using namespace std;
int main()
{
<span style="white-space:pre"> </span>char buffer1[20],buffer2[20];
<span style="white-space:pre"> </span>cout<<"Enter a sentence:\n";
<span style="white-space:pre"> </span>cin.get(buffer1,20,'m');//先执行get,再执行getline。
<span style="white-space:pre"> </span>cout<<"The string read with cin.getline was: \n"
<span style="white-space:pre"> </span><<buffer1<<endl;//get()遇到'm'结束时,'m'会留在输入流中。
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>cin.getline(buffer2,20,'m');//cin.getline()遇到'm'直接终止接收字符。
<span style="white-space:pre"> </span>cout<<"The string read with cin.getline was:\n"
<span style="white-space:pre"> </span><<buffer2<<endl;//字符串能输出但buffer3没有值!
return 0;
}
运行结果:
get返回后'm'仍然在输入流中,getline直接接收字符'm'结束,后边的字符并没有输出!