c++ getline()和get()的區別


1、方法get(char &)和get(void)提供不跳過空白的單字符輸入功能;
2、函數get(char * , int , char)和getline(char * , int , char)在默認情況下讀取整行而不是一個單詞;
它們被稱為非格式轉化輸入函數,因為它們只是讀取字符輸入,而不會跳過空白,也不進行數據轉換。

他們不同於cin是遇到空格即輸出結束。

在使用char參數或沒有參數的情況下,get()方法讀取下一個字符,及時該字符是空格,制表符或換行符。get(char & ch)版本將輸入字符賦給其參數,而get(void)版本將輸入字符轉換為整型(通常為int)。然后將其返回。

下面用例子簡單說明它們的不同用法。

1、get(char&)

char ch;
cin.get(ch);
while(ch != '\n'){ cout<<ch; cin.get(ch) }

當讀取字符到換行符時結束,如果沒有換行符判斷,那么遇到輸出結束時調用setstate(failbit)導致cin的測試結果為false

無參數的get()用法是

ch = cin.get();

其返回值為int。

 

對比cin.get(ch) 與 cin.get()

                特征                                                 cin.get(ch)                                              ch = cin.get()

    傳輸輸入字符的方法                                   賦給參數ch                                        將函數返回值賦給ch

  字符輸入時函數的返回值                     指向istream對象的引用                                  字符編碼(int值)

到達文件尾時函數的返回值                            轉換為false                                                    EOF

 

2、字符串輸入:getline(),get()

istream& get(char*, int, char);
istream& get(char*, int);

istream& getline(char*, int, char);
istream& getline(char*, int);

第一個參數是存放字符串的內存單元地址,第二個參數要比最大字符數大1(存放'\0'),第三個參數指定用作分隔符的字符,默認是'\n';

那么這兩個函數的區別在於getline()會丟棄讀取到的分隔符,而get()不會。因此在遇到空行的時候兩個函數的操作就不同。因為getline()會將換行符視作一個字符。

 

getline(char *, int)        如果沒有讀取任何字符(但換行符被視為讀取了一個字符),則設置failbit

                                    如果讀取了最大數目的字符,且行中還有其他字符,則設置failbit

get(char *, int)             如果沒有讀取任何字符,則設置failbit

還有一種調用方式

getline(cin, string&);

---------------------
參考:https://blog.csdn.net/qq_42128241/article/details/81772875


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM