1. 程式人生 > >C++:cin、cin.get()、cin.getline()、getchar()、getline()總結

C++:cin、cin.get()、cin.getline()、getchar()、getline()總結

一、cin

cin從輸入緩衝區中讀取資料,遇到結束符(Tab、Space、Enter)時輸入結束,並且結束時結束符並不會丟棄,而是保留在輸入緩衝區中。cin開始讀取資料時遇到結束符時會直接忽略,也就是當輸入緩衝區第一個資料為結束符時,cin會忽略並丟棄結束符。

注意:當cin或者cin.get()與getline()同時出現時,需要注意緩衝區中的結束符。

char ch1;
cin >> ch1;
cout << (int)ch1 << endl;
char ch2 = cin.get();
cout << (int)ch2 << endl;

當輸入1+Enter時,輸出49和10(1對應的ASCII碼為49,\n對應的ASCII碼為10),說明結束符保留在緩衝區內;

當輸入Space+1+Enter時,輸出同上,說明讀取時忽略了結束符;

二、cin.get()

cin.get()從輸入緩衝區中讀取一個字元,對於緩衝區的Space、Tab、Enter不敏感,可以讀取這些符號。

三、cin.get(陣列,長度,結束符)

cin.get(陣列,長度,結束符)從緩衝區中讀取出(長度-1)的字串或者遇到結束符時結束讀取資料(結束符保留在緩衝區內),不定義第三個引數時,結束符預設為\n;

char ch1, str[5];
cin.get(str, 4,'a' );
cout << str << endl;
cin >> ch1;
cout << ch1 << endl;

當輸入12345+Enter時,輸出123和4,說明該函式讀取的(長度-1)個字元,第一次讀取了123,而4和5仍保留在緩衝區內;

當輸入1a345+Enter時,輸出1和a,說明當遇到結束符時,讀取結束並且結束符保留在緩衝區內;

四、cin.getline(陣列, 長度, 結束符)

cin.getline(陣列, 長度, 結束符)從緩衝區中讀取出(長度-1)的字串或者遇到結束符時結束讀取資料(結束符不會保留在緩衝區內),不定義第三個引數時,結束符預設為\n;

但是輸入的字串超過長度長時,會引起cin函式的錯誤,後面的cin出錯;而cin.get(陣列, 長度, 結束符)函式不會引起錯誤,後面的cin操作會繼續從緩衝區中讀取資料,不會引起異常;

char ch1, str[10];
cin.getline(str, 5);
cout << str << endl;
ch1 = cin.get();
cout << (int)ch1 << endl;

當輸入12345+Enter時,輸出1234和-1,說明讀取讀取了(長度-1)個字元,並且後面讀取異常;

當輸入1234+Enter時,輸出12和4,說明讀取到結束符時停止,並且將結束符從緩衝區中丟棄;

char ch1, str[10];
cin.getline(str, 5, 'a');
cout << str << endl;
ch1 = cin.get();
cout << (int)ch1 << endl;

當輸入1234a+Enter時,輸出1234和10,說明結束符a被丟棄,10為\n的ASCII碼;

當輸入12345+Enter時,輸出1234和-1,說明讀取讀取了(長度-1)個字元,並且後面讀取異常;

五、getchar()

getchar()從緩衝區中讀取一個字元,對於緩衝區的Tab、Space、Enter等符號不敏感,類似於不接受引數的cin.get()函式;

六、getline()

istream& getline (istream&  is, string& str, char delim); istream& getline (istream&& is, string& str, char delim); istream& getline (istream&  is, string& str); istream& getline (istream&& is, string& str);

getline()從流中讀取一個字串,可以自定義讀取結束符,預設結束符為換行符,讀取結束時,結束符不保留在緩衝區內;

char ch1;
string str;
getline(cin, str);
cout << str << endl;
ch1 = cin.get();
cout << (int)ch1 << endl;

當輸入123456+Enter+1時,輸出123456和49,結束符沒有保留在緩衝區;

char ch1;
string str;
getline(cin, str,'a');
cout << str << endl;
ch1 = cin.get();
cout << (int)ch1 << endl;

當輸入123a123+Enter時,輸出123和49。