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()在<string>类库中,cin.getline在<istream>库中

(2)用法不同

getline()的用法

#include<iostream>
#include<string>
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<iostream>
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 <iostream>
#include <string>
#include<istream>
using namespace std;
int main()
{
    string str1;
    cin>>str1;
    cout<<str1<<endl;
	return 0;
}

getline()的用法

#include<iostream>
#include<string>
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<iostream>
#include<istream>
using namespace std;
int main()
{
	char str[20];
	cin.getline(str,20);
	cout << str;
	return 0;
}

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

#include<iostream>
#include<istream>
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<iostream>
#include<istream>
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<iostream>
#include<istream>
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<iostream>
#include<istream>
using namespace std;
int main()
{
	char str[30];
	int n;
	cin >> n;
	cin. ignore();
	cin.getline(str,n);
	cout << str << endl;
    return 0;
}

#include<iostream>
#include<istream>using 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<iostream>
#include<istream>
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放到前面是没有问题的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值