總結:
輸入字串型別string型別:使用string類的getline()函式 || getline(cin,string)。
輸入字元陣列char型別:使用cin.getline()方法 || cin.getline(char, int)。
詳解:一、string類的getline()函式
getline(cin,str)函式是處理string類的函式。第二個引數為string型別的變數。讀入時第二個引數為string型別,而不是char*,要注意區別。
getline()函式的定義如下所示:
istream& getline ( istream &is , string &str , char delim );
istream& getline ( istream &is , string &str );
// is 輸入流
// str 字串型別
// delim 終結符,遇到該字元停止讀取操作,不寫的話預設為回車,如定義2中的示例。
函式的返回值:與引數is一樣。
請各位看官注意!!!
在使用while(getline(cin,line))的時候,判斷while()是否結束迴圈的條件不是輸入流輸入了回車(** 或getline函式裡你自己定義的結束符**),而是getline這個函式是否輸入無效(這麼說好像有點繞,給你們來個爽快的)。直到你輸入了eof或者ctrl+z,while迴圈才會結束,而且要注意的是,只有getline函式動作完畢時,while才會執行內部的迴圈,例如
#include #include using namespace std;
int main()
{ string s;
while(getline(cin,s))
{cout《直到你輸入了回車或者你自己設定的結束符,str這個字串才會被輸出。
讓我們一起來分析一下while(getline(cin,line))語句
注意這裡預設回車符停止讀入,按ctrl+z或鍵入eof回車即可退出迴圈。
在這個語句中,首先getline從標準輸入裝置上讀入字元,然後返回給輸入流cin,注意了,是cin,所以while判斷語句的真實判斷物件是cin,也就是判斷當前是否存在有效的輸入流。在這種情況下,我想只要你的電腦不中毒不發神經你的輸入流怎麼會沒有效?所以這種情況下不管你怎麼輸入都跳不出迴圈,因為你的輸入流有效,跳不出迴圈。
然而有些同學誤以為while判斷語句的判斷物件是line(也就是line是否為空),然後想通過直接回車(即輸入乙個空的line)跳出迴圈,卻發現怎麼也跳不出迴圈。這是因為你的回車只會終止getline()函式的讀入操作。getline()函式終止後又進行while()判斷(即判斷輸入流是否有效,你的輸入流當然有效,滿足條件),所以又執行getline()函式,導致程式永遠跳不出迴圈。
注意:上面講到的getline(cin,str)實際是乙個全域性函式,本身屬於string類。所以你使用該函式的時候請記得新增#include 標頭檔案。下面介紹乙個與getline很相似的函式cin.getline。
二、cin.getline()方法
cin.getline()函式是處理陣列字串的,其原型為cin.getline(char * , int),第乙個引數為乙個char指標,第二個引數為陣列字串長度。
cin.getline()當輸入超長時,會引起cin函式的錯誤,後面的cin操作將不再執行。如下**:
#include #include using namespace std;
int main()
{ int i=0;
char c[101];
while(cin.getline(c,6)) //在不遇到結束符的情況下,最多可接收6-1=5個字元到c中
{for(i;c[i]!='\0';i++)
{cout《輸入zifuchuan[enter],長度大於最大長度5,就會導致cin函式錯誤,其後既沒有像cin.get()一樣直接從輸入緩衝區直接讀資料,也沒有從鍵盤輸入。
所以此處可以注意,考慮在用cin.getline()時,適度設定其最大接受長度大一點。
此函式會一次讀取多個字元(包括空白字元)。它以指定的位址為存放第乙個讀取的字元的位置,依次向後存放讀取的字元,直到讀滿n-1個,或者遇到指定的結束符為止。若不指定結束符,則預設結束符為』\n』。其語法為:
cin.getline(字元指標(char*),字元個數n(int),結束符(char));
C 輸入字元限制
只能輸入數字 0 9 只能輸入 n 位的數字 d 只能輸入至少 n 位的數字 d 只能輸入 m n 位的數字 d 只能輸入零和非零開頭的數字 0 1 9 0 9 只能輸入有兩位小數的正實數 0 9 0 9 只能輸入有 1 3 位小數的正實數 0 9 0 9 只能輸入非零的正整數 1 9 0 9 只能...
c 字元輸入讀取
cin.clear 重置輸入流 cin.get 鎖住螢幕直到獲取輸入 while cin cin.get ch 方法返回的是乙個cin物件,istream類提供了可以將istream物件轉換為bool 當cin出現在需要bool地方,eg while的測試條件中,將cin物件轉換為bool的方法自動...
C 輸入字元限制
只能輸入數字 1 katex parse error expected group after at position 17 只能輸入 n 位的數字 d 只能輸入至少 n 位的數字 d 只能輸入 m n 位的數字 d 只能輸入零和非零開頭的數字 0 1 9 0 9 只能輸入有兩位小數的正實數 2 0...