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;
}
運作結果

可以看到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’處理掉了。