getline(),cin.get(),cin>>,cin.getline()的区别

目录

1.getline()和cin.getline()

2.cin和getline()的区别

3.cin.get()和cin.getline()的区别

4.cin>>和cin.getline()一块用时注意


1.getline()和cin.getline()

先来说一个getline()和cin.getline()两者的区别

(1)两者属于不同的库中,getline()在类库中,cin.getline在库中

(2)用法不同

getline()的用法

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

这是getline()的用法,getline(cin,string类型的变量,分隔的符号)最后一个分隔的符号可有可没有,不设置的情况下系统默认该字符为’\n’,也就是回车换行符(遇到回车停止读入),读取的字符串一定是string类型的字符串,不能读取char str[],char* str的字符数组,如果没有特殊的指定,是可以读取空格

cin.getline()的用法

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

上面是cin.getline的用法,cin.getline(字符数组,size,分隔字符),它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为’\n’。读取的字符串一定是字符数组类型的char str[]或者char *str,如果没有特殊的指定,是可以读取空格

2.cin和getline()的区别

cin的用法

#include 
#include 
#include
using namespace std;
int main()
{
    string str1;
    cin>>str1;
    cout<

getline()的用法

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

cin读到空字符的时候就会自动停止,读到的部分是空字符之前的

getline()则是读到指定字符的位置,默认为换行的位置

3.cin.get()和cin.getline()的区别

他们两个语法上是相同的

getline的是cin.getline(str,size,分隔字符)

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

get的是cin.get(str.szie,分隔字符)

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

他们都是读取char str[]和char *str类型的字符数组,因为两者都是默认读到'\n',最大的区别就是get不会丢去最后一个'\n',而getline()会丢去'\n',这个易错的就是当连续输入时,get(str,size)之间要加一个cin.get()或者cin.ignore,因为cin.get(str,size)不会丢弃最后的'\0'换行符,第二个cin.get(str,size)就会读到'\0',就会直接运行,不会让你输入

#include
#include
using namespace std;
int main()
{
    char a[20];
	char b[20];
	cin.get(a, 20);
	cin.ignore();
	cin.get(b, 20);
	cout << a << " " << b << endl;
    return 0;
}

而cin.getline()会丢弃'\0',不需要加cin.ignore()

#include
#include
using namespace std;
int main()
{
    char a[20];
	char b[20];
	cin.getline(a, 20);
	cin.getline(b, 20);
	cout << a << " " << b << endl;
    return 0;
}

cin.getline(a, 10);//第10位存放字符串结束符'\0'


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

#include
#includeusing namespace std;
int main()
{
	char str[30];
	char str1[30];
	int n;
	cin >> n;
	cin.ignore();
	cin.getline(str,n);
	cin.getline(str1, n);
	cout << str << endl;
	cout << str1 << endl;
return 0;
}

****上面的代码当你制定好n的个数之后输入的个数不能超过n-1个,为什么是n-1个呢,因为最后一个字符会被'\0'代替,如果制定好n的个数之后,输入字符的个数超过了n-1个就会存在溢出,就不能再继续输入

4.cin>>和cin.getline()一块用时注意

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

cin>>放到getline前面的时候要在中间加一个cin.ignore();因为cin>>读到'\0'就不读了,'\0'就在缓存区中,我们需要先干掉'\0'所以先输入一行ignore的代码

getline放到前面是没有问题的

你可能感兴趣的:(c++)