解析C++中g(shù)et()和getline()的區(qū)別(一)
下面通過(guò)例子為大家介紹C++中get()和getline()的區(qū)別。
問(wèn)題一:
- #include <iostream>
- #include <string>
- using namespace std;
- void main(void)
- {
- string st ;
- cout<<"Input st:";
- getline(cin,st);
- cout<<st<<endl;
- }
上面這段代碼,如果輸入abc,那么需要按兩次回車鍵才能顯示abc(在VC6中),因?yàn)間etline有三個(gè)參數(shù),第三個(gè)參數(shù)是字符串的結(jié)束符,也就是當(dāng)getline遇到這個(gè)結(jié)束符時(shí),就不在接受輸入了,比如寫成 getline(cin,st,'s'); 即使輸入的是abcsabc 那么也只會(huì)顯示 abc ,因此對(duì)于上面出現(xiàn)的情況,有人說(shuō)getline默認(rèn)情況下以回車('\n')作為結(jié)束符,第一次按回車表示字符串結(jié)束,第二次按回車才開(kāi)始輸出。也有人說(shuō)這是VC6的bug,我覺(jué)得前一種解釋比較合理,因?yàn)椋?/p>
如果你輸入abc(回車)abc,那么程序會(huì)顯示abc,可見(jiàn)回車的確是函數(shù)默認(rèn)的結(jié)束符。同理:
- getline(cin,candybar.pinpai);
就是當(dāng)輸入一串字符串后賦值給candybar.pinpai,然后再按二次回車才顯示在屏幕上!
問(wèn)題二:
1.cin.getline是讀入一行字符,比如:
- #include <iostream.h>
- void main()
- {
- char str[20];
- cout<<"Input :";
- cin.getline(str,20);
- cout<<str<<endl;
- }
當(dāng)輸入:abd cdrasdf g的時(shí)候就會(huì)輸出:abd cdrasdf g。
2.cin.get()第一個(gè)用法,是讀入一個(gè)字符。
- #include <iostream.h>
- void main()
- {
- char str;
- cout<<"Input :";
- str=cin.get();
- cout<<str<<endl;
- }
當(dāng)你輸入“ABAF”的時(shí)候,只會(huì)顯示“A”,因?yàn)橹蛔x入了一個(gè)字符(空格也可以讀入)。
3.cin.get()第二個(gè)用法,也是輸入一行(同cin.getline()),但是區(qū)別就是,不輸出分隔符。
希望通過(guò)以上內(nèi)容的介紹,能夠給你帶來(lái)幫助。