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