cin.get()与cin.getline()函数讲解1

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;
}
运行结果:

cin.get()与cin.getline()函数讲解1_第1张图片
get返回后'm'仍然在输入流中,getline直接接收字符'm'结束,后边的字符并没有输出!

你可能感兴趣的:(C++,函数)