C++之cin、getline(cin,str)、cin.getline(char*,len)与换行符的藕断丝连

cin:接受一个字符串,遇到换行符,空格,tab就结束。不会读入‘\n’,所以如果接下来需要用getline(cin,str)那么就需要一个getchar();
getline(cin,str):读入一个string,可以接受空格并输出。
cin.getline(char*,len):读入一个字符串并输出。

先给出结论:

1getline(cin,str)读取换行符 并且将换行符替换成'\0',并将换行符从输入队列中抹去。

2、cin不会读入换行符;//这个总所周知,但是可以利用这个特点来连续读入任意个字符串。

3、cin.getline(char*,len)读取换行符并替换成'\0',并将换行符从输入队列中抹去

验证程序:

1、getline(cin,str)读取换行符 并且将换行符替换成’\0’,并将换行符从输入队列中抹去。

#include<bits/stdc++.h>
using namespace std;
map<string,set<int> > mp;
int main(){
	string str;
//	cin>>str;
	getline(cin,str);
	char c = getchar();
	if(c=='\n') cout<<"读入了换行符"<<endl; 
	else cout<<c;
}

运行结果
在这里插入图片描述
可以看到getchar读入的并不是换行符,说明getline将输入队列中的‘\n’给处理掉了。

2、cin不会读入换行符;//这个总所周知,但是可以利用这个特点来连续读入任意个字符串。

#include<bits/stdc++.h>
using namespace std;
map<string,set<int> > mp;
int main(){
	string str;
	cin>>str;
//	getline(cin,str);
	char c = getchar();
	if(c=='\n') cout<<"读入了换行符"<<endl; 
	else cout<<c;
}

运行结果:
在这里插入图片描述
可以看到cin没有将输入队列中的‘\n’给处理掉
这样我们可以利用这个特点连续读入任意个字符串

while(cin>>info){
		//对字符串的操作
		char c = getchar();
		if(c=='\n') break;
	}

3、 ## cin.getline(char*,len)读取换行符并替换成’\0’,并将换行符从输入队列中抹去

#include<bits/stdc++.h>
using namespace std;
map<string,set<int> > mp;
int main(){
	char ch[20];
	cin.getline(ch,20);
//	getline(cin,str);
	char c = getchar();
	if(c=='\n') cout<<"读入了换行符"<<endl; 
	else cout<<c;
}

运行结果:
在这里插入图片描述
可以看到cin.getline()也将换行符读入,并且将输入队列中的‘\n’处理掉了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值