c++中的cin和getline()函數兩種用法詳解

1、istream 類成員

2、cin

cin 輸入接觸到第一個非空格字符時開始閱讀,當遇到下一個空格字符(空格、製表符、換行符)時就會停止讀取。因此可以放在while中作爲輸入bool類型的輸入結束判斷符

while(cin>>x)

爲了避免cin對於空白符的忽略問題,可以用getline函數

3、getline函數

getline函數可以讀取整行,包括前導和嵌入式的空格,並將其存儲在字符串對象中。

C++有兩種getline函數:
第一種:在頭文件#include<istream>中,是iostream類的成員函數,有兩種重載形式:

istream& getline(char* s, streamsize n);
istream& getline(char* s, streamsize n, char delim);

作用是:從istream中讀取至多n個字符(包含結束標記符)保存在s對贏得數組中。即使還沒讀夠n個字符。如果遇到delim或者字符達到限制,則讀取一行終止,delim都不會被保存進s對應的數組中。

使用標準輸入流和標準輸出流,std::cin; std::cout; std::endl; 

使用規範 std::cin.getline(...);

用法示例:

  (1)  char buf[20];
       char a = 'q';
       //cin.getline(buf, 10)
       std::cin.getline(buf, 10 ,a)

 以輸入遇到回車換行符'\n'作爲結束, 或着滿10個字符結束,或者遇到設定的字符a = 'a'結束字符流讀取。

第二種:在頭文件#include<string>中,是普通函數,有四種重載形式。

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);

用法和第一種類似,但是讀取的istream是作爲參數 is 傳進函數的,讀取的字符串保存在string類型的str中。is : 表示一個輸入流,例如cin。其中 str : 爲string類型的引用,用來存儲輸入流中的流信息。delim :爲char類型的變量,截斷字符。不定義的情況下,默認遇到 ‘\n'代表一行的輸入結束。

用法示例:

(2)char str;

// 在輸入時,直至遇到‘\n’或EOF, 才終止一行字符串輸入操作。

getline(cin, str);

//以輸入遇到回車換行符'\n'或EOF作爲一行字符串輸入操作結束, 或者遇到設定的字符 'q' 也可作爲字符流讀取結束。

getline(cin, str, 'q') 

首先對於EOF,是C語言中爲了區分有效數據和輸入結束符的,由系統鎖定。windows下是ctrl+z , linux/unix下是ctrl + d)

getline不是C的庫函數,而是C++的庫函數。遇到一下情況時,字符流結束。

(1)到文件結束 (2) 遇到函數定界符 (3) 輸入達到最大長度限制

用getline()函數用在while中作爲條件判斷!

string str;
while(getline(cin, str)){
cout<<str;
}

會一直輸入,遇到換行'\n' 符則(執行一次while循環體),循環繼續,再進入輸入狀態。直到EOF事件發生,如ctrl+z 則跳出while循環,結束。

string str;
while(getline(cin, str, 'q')){
cout<<str;
}

會一直循環輸入,遇到'\n' 時也不影響,直到遇到 'q' 字符則(執行一次while循環體)既此處爲輸出打印一次,然後循環繼續,再進入輸入狀態。直到EOF事件發生,如ctrl+z 則跳出while循環,結束。

總結:關於getline() 函數在while中作爲條件判斷時,判斷當前是否存在有效的輸入流對象,判斷的是cin流的狀態,所以正常輸入的情況下跳不出while(getline(cin,str))或while(getline(cin,str, 'q'))的判斷條件,而遇到 '\n'或 'q'時判斷條件爲真,則僅僅代表一行或一次的輸入結束,因此進入while循環體執行一次while中的語句塊。直到最終通過EOF事件的發生,跳出while循環。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章