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’处理掉了。

猜你喜欢

转载自blog.csdn.net/qq_39072627/article/details/107099982