cin.get()和cin.getline()
阿新 • • 發佈:2019-01-13
get()函式是cin輸入流物件的成員函式,它有3種形式:無引數的,有一個引數的,有3個引數的。
無參:cin.get()
用來從指定的輸入流中提取一個字元(包括空白字元),函式的返回值就是讀入的字元。 若遇到輸入流中的檔案結束符,則函式值返回檔案結束標誌EOF(End Of File),一般以-1代表EOF,用-1而不用0或正值,是考慮到不與字元的ASCII程式碼混淆,但不同的C ++系統所用的EOF值有可能不同。
int main() { char c; cout << "enter a sentence:" << endl; while ((c=cin.get())!= EOF) cout.put(c); return 0; }
input:hello c++
output:hello c++
C語言中的getchar函式與流成員函式cin.get( )的功能相同,C++保留了C的這種用法,可以用getchar(c)從鍵盤讀入一個字元賦給c。
帶一個引數:cin.get(ch)
其作用是從輸入流中讀取一個字元,賦給字元變數ch。如果讀取成功則函式返回true(真),如失敗(遇檔案結束符) 則函式返回false(假)。
int main() { char c; cout << "enter a sentence:" << endl; while (( cin.get(c))) cout.put(c); return 0; }
帶三個引數:cin.get(字元指標, 字元個數n, 終止字元)
其作用是從輸入流中讀取n-1個字元,賦給指定的字元陣列(或字元指標指向的陣列),如果在讀取n-1個字元之前遇到指定的終止字元,則提前結束讀取。如果讀取成功則函式返回true(真),如失敗(遇檔案結束符) 則函式返回false(假)。
int main() { char buf[20]; cout << "enter a sentence:" << endl; cin.get(buf, 10, 'c'); cout << buf << endl; cout << strlen(buf) << endl; return 0; }
getline函式的作用是從輸入流中讀取一行字元,其用法與帶3個引數的get函式類似。
cin.getline(字元陣列(或字元指標), 字元個數n, 終止標誌字元)
int main()
{
char buf[20];
cout << "enter a sentence:" << endl;
cin >> buf;//遇到空格終止
cout << buf << endl;
cin.getline(buf, 20, '/');//在讀滿10個字元之前若遇到‘/’則會提前終止
cout << buf << endl;
cin.getline(buf, 20,'/');//在讀滿10個字元之前若遇到‘\n’則會提前終止,即預設終止字元為‘\n’
cout << buf << endl;
return 0;
}
int main()
{
char buf[20];
cout << "enter a sentence:" << endl;
cin >> buf;//遇到空格終止
cout << buf << endl;
cin.get(buf, 20, '/');//在讀滿10個字元之前若遇到‘/’則會提前終止
cout << buf << endl;
cin.getline(buf, 20,'/');//在讀滿10個字元之前若遇到‘\n’則會提前終止,即預設終止字元為‘\n’
cout << buf << endl;
return 0;
}
分析上面兩端程式碼,得出cin.getline()如何使用以及與cin.get()的差異:
- 用getline函式從輸入流讀字元時,遇到終止標誌字元時結束,指標移到該終止標誌字元之後,下一個getline函式將從該終止標誌的下一個字元開始接著讀入,如果用cin.get函式從輸入流讀字元時,遇終止標誌字元時停止讀取,指標不向後移動,仍然停留在原位置。下一次讀取時仍從該終止標誌字元開始。這是getline函式和get函式不同之處。因此用get函式時要特別注意,必要時用其他方法跳過該終止標誌字元,如ignore函式,但一般來說還是用getline函式更便捷。
- “cin<<”和用成員函式cin.getline()讀資料的區別。用“cin<<”讀資料時以空白字元(包括空格、tab鍵、回車鍵)作為終止標誌,而用cin.getline()讀資料時連續讀取一系列字元,可以包括空格。用“cin <<”可以讀取C++的標準型別的各型別資料(如果經過過載,還可以用於輸入自定義型別的資料),而用cin.getline()只用於輸入字元型資料。