天天看點

C++之cin、getline(cin,str)、cin.getline(char*,len)與換行符的藕斷絲連

cin:接受一個字元串,遇到換行符,空格,tab就結束。不會讀入‘\n’,是以如果接下來需要用getline(cin,str)那麼就需要一個getchar();

getline(cin,str):讀入一個string,可以接受空格并輸出。

cin.getline(char*,len):讀入一個字元串并輸出。

先給出結論:

1、getline(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;
}
           

運作結果

C++之cin、getline(cin,str)、cin.getline(char*,len)與換行符的藕斷絲連

可以看到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;
}
           

運作結果:

C++之cin、getline(cin,str)、cin.getline(char*,len)與換行符的藕斷絲連

可以看到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;
}
           

運作結果:

C++之cin、getline(cin,str)、cin.getline(char*,len)與換行符的藕斷絲連

可以看到cin.getline()也将換行符讀入,并且将輸入隊列中的‘\n’處理掉了。

繼續閱讀