c++ :cin、 cin.getline() 、 getline() 的用法區別
主要內容:
- cin用法
- cin.getline()用法
- getline()用法
- 注意問題
1. cin>>
用法1:輸入一個數字或字元
#include
using namespace std;
main ()
{
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
}
用法2:接收一個字串,遇“空格”、“TAB”、“回車”就結束
#include
using namespace std;
main ()
{
char a[20];
cin>>a;
cout<<a<<endl;
}
輸入:jkljkljkl
輸出:jkljkljkl
輸入:jkljkl jkljkl //遇空格結束
輸出:jkljkl
2. cin.getline()用法
用法:接收一個字串,可以接收空格並輸出
#include
using namespace std;
main ()
{
char m[20];
cin.getline(m,5);
cout<<m<<endl;
}
輸入:jkljkljkl
輸出:jklj
接收5個字元到m中,其中最後一個為’\0’,所以只看到4個字元輸出;
如果把5改成20:
輸入:jkljkljkl
輸出:jkljkljkl
輸入:jklf fjlsjf fjsdklf
輸出:jklf fjlsjf fjsdklf
延伸:
1、cin.getline()實際上有三個引數,cin.getline(接收字串的變數,接收字元個數,結束字元)
2、當第三個引數省略時,系統預設為’\0’
3、如果將例子中cin.getline()改為cin.getline(m,5,‘a’);當輸入jlkjkljkl時輸出jklj,輸入jkaljkljkl時,輸出jk
3. getline()
用法:接收一個字串,可以接收空格並輸出,需包含“#include”
#include
#include
using namespace std;
main ()
{
string str;
getline(cin,str);
cout<<str<<endl;
}
輸入:jkljkljkl
輸出:jkljkljkl
輸入:jkl jfksldfj jklsjfl
輸出:jkl jfksldfj jklsjfl
和cin.getline()一樣getline()也有三個引數,第三個引數用來確定輸入的邊界。
4. 注意的問題
1、cin.getline()屬於istream流,而getline()屬於string流,是不一樣的兩個函式
2、當同時使用cin>>,getline()時,需要注意的是,在cin>>輸入流完成之後,getline()之前,需要通過
str="\n";
getline(cin,str);
的方式將回車符作為輸入流cin以清除快取,如果不這樣做的話,在控制檯上就不會出現getline()的輸入提示,而直接跳過,因為程式預設地將之前的變數作為輸入流。
看下面一段程式:
/-------------Basic Input/Output-------------/
#include
#include
#include
using namespace std;
int main(){
int age;
//standard input(cin)
cout<<“Please enter an integer value as your age: “;
cin>>age;
cout<<“Your ager is: “<<age<<”.\n”;
//cin and string
string mystr;
cout<<“What’s your name? “<<endl;
mystr=”\n”;
getline(cin,mystr);
getline(cin,mystr);
cout<<“Hello,”<<mystr<<”.\n”;
char sex;
cout<<"Please enter a F or M as your sex: ";
cin>>sex;
cout<<"Your sex is: "<<sex<<endl;
cout<<“What’s your favorite team? “;
mystr=”\n”;
getline(cin,mystr);
getline(cin,mystr);
cout<<“I like “<<mystr<<”.\n”;
system("pause");
return 0;
}
執行結果為:
如果不新增紅色程式碼,則執行結果為: