C++中的cin.getline()和getline()的区别

版权声明:本文为博主原创文章,如需转载,请注明出处 https://blog.csdn.net/qq_36554582/article/details/83151897

cin.getline()是输入流对象的成员函数
getline()是string类的成员函数
先来看一下getline()的使用方法:

#include<iostream>
using namespace std;
int main()
{
	string str;
	getline(cin,str);
	cout << str;
	return 0;
}

使用getline(),顾名思义就是读取一行,这一行中可以包括空格,我们来看下输入以及输出结果:

abc def ghhgjgh
abc def ghhgjgh

这个程序的作用就是把我们输入的字符串给原封不动的输出出来,包括中间的空格。运行结果的第一行是输入,第二行是输出。
我们再来看一下cin.getline的用法:

#include<iostream>
using namespace std;
int main()
{
	char str[20];
	cin.getline(str,20);
	cout << str;
	return 0;
}

cin.getline()的参数是一个字符数组以及我们要读取的元素的个数,(如果我们没有特殊要求输入字符的个数的话,那么这个元素的个数我们通常采取声明字符数组的时候的数组的大小)这个程序的作用还是和刚才的一样,把我们输入的字符串给原封不动的输出出来,来看一下输入和输出结果:

abc def hjhj
abc def hjhj

我们可以看到,这个cin.getline()执行的效果和getline()的效果一样,都可以把字符串输出出来,并且可以输出空格,但是相对于getline()来说,cin.getline()在使用的时候,必须传入字符数组,并且还需要指定字符数组的长度,我感觉非常的不方便,有时候我们并不知道我们要操作的字符串到底有多长。所以说我个人目前还是比较喜欢用getline()。

对于cin.getline(),我们再来把程序稍微而更改一下:

#include<iostream>
using namespace std;
int main()
{
	char str[20];
	cin.getline(str,5);
	cout << str;
	return 0;
}

当我们把cin.getline()的第二个参数改成5的时候,那么程序就只会读取我们输入字符串的前4个字符,输出结果:

abcdefgrtt fhg
abcd

也就是说我们可以通过设置cin.getline()中读取元素的个数来限制用户输入的有效字符数。

我们再来看一下C++中的cin是怎么读取数据的
cin在读取字符串时,它遇到空格或者换行符的时候就会结束此次读取,也就是说,当我们想要原封不动的输出我们输入的字符串的时候,如果直接使用cin,那么她就只会输出第一个空格前面的字符,而不会把原来的字符串都给输出出来,我们来看一下例子:

#include<iostream>
using namespace std;
int main()
{
	string str;
	cin >> str;
	cout << str;
	return 0;
}

再来看下输入输出结果:

abc def ghjhjh
abc

从输出的结果我们就可以看出来,他只把第一个空格前面的字符给输出了出来,并且由于程序中没有写循环读取,所以程序就只会输出第一个空格前面的字符。

下面我们再来写一个循环读取的函数:

#include<iostream>
using namespace std;
int main()
{
	string str;
	while(cin >> str)
	{
		cout << str;
	}
	return 0;
}

看下输入输出结果:

abc def fergfg
abcdeffergfg

我们从输出的结果可以看到,这时候会循环读取了,但是我们发现原来字符串中的空格并没有被输出出来,这也就是采用cin的弊端,cin以空格或者换行为结尾,并且不会输出空格

猜你喜欢

转载自blog.csdn.net/qq_36554582/article/details/83151897