C 每次讀取一行字串輸入

2021-09-25 06:47:34 字數 1407 閱讀 8538

c++的istream中的類(如cin)提供了一些面向行的類成員函式:getlinr()和get()。這兩個函式都讀取一行輸入,直到到達換行符。然而,隨後getline()將丟棄換行符,而get()將換行符保留在輸入佇列中。

1.getline()

getline()函式讀取整行,它使用通過回車鍵輸入的換行符來確定輸入結尾。要呼叫這種方法,可以使用cin.getline()。該函式有兩個引數。第乙個引數是用來儲存輸入行的陣列名稱,第二個引數是要讀取的字元數如果這個引數為20,則函式最多讀取19個字元,餘下的空間用於儲存自動在結尾處新增的空字元。getline()成員函式在讀取指定數目的字元或遇到換行符時停止讀取。

例如,假設要使用getline()將姓名讀入到乙個包含20個元素的name陣列中,可以用這樣的函式呼叫:

cin.getline(name,20);
這將一行讀入到name陣列中——如果這行包含的字元不超過19個。

getline()函式每次讀取一行。它通過換行符來確定行尾,但不儲存換行符。相反,在儲存字串時,它用空字元來替換換行符。

2.get()

istream類有另乙個名為get()的成員函式,該函式有幾種變體。其中一種變體的工作方式與getline()類似,它們接受的引數相同,解釋引數的方式也相同,並且都讀取到行尾。但get()並不再讀取並丟棄換行符,而是將其留在輸入佇列中。假設連續兩次呼叫get():

cin.get(name,arsize);

cin.get(name,arsize); //a problem

由於第一次呼叫後,換行符將留在輸入佇列中,因此第二次呼叫時看到的第乙個 字元便是換行符。因此get()認為已經到達行尾,而沒有發現任何可讀取的內容。如果不借助於幫助,get()將不能跨過該換行符。

get()有另一種變體。使用不帶任何引數的cin.get()呼叫可讀取下乙個字元(即使是換行符),因此可以用它來處理換行符,為讀取下一行輸入做準備:

cin.get(name,arsize);   //read first line

cin.get(); //read newline

cin.get(name,arsize); //read second line

get()相比於getline()可以使得輸入更仔細。例如,假設用get()將一行讀入陣列。如何知道停止原因是由於已經讀取了整行,而不是由於陣列已經填滿了呢?檢視下乙個字元,如果是換行符,說明已經讀取了整行;否則,說明該行中還有其他輸入。

getline()使用起來簡單一些,但get()使得檢查錯誤更簡單些。

注:本文是學習《c++ primer》的筆記

C 輸入一行字串

一.對於字元陣列 方法一 getline 讀入整行資料,它使用回車鍵輸入的換行符來確定輸入結尾。呼叫方法 cin.getline str,len 第乙個引數str是用來儲存輸入行的陣列名稱,第二個引數len是要讀取的字元數。include using namespace std int main 方...

C 裡讀取一行字串

大家在學習c 程式設計時,一般在輸入方面都是使用的cin.而cin是使用空白 空格,製表符和換行符 來定字串的界的。這就導致了對於帶有空格的字串,比如 i love c 奮鬥樂園論壇 只能讀入 i 後面的都無法讀入。這時怎麼辦?一.對於字元陣列 方法一 getline 讀入整行資料,它使用回車鍵輸入...

C 讀取一行字串的方式

大家在學習c 程式設計時,一般在輸入方面都是使用的cin.而cin是使用空白 空格,製表符和換行符 來定字串的界的。這就導致了對於帶有空格的字串,比如 i love acm 只能讀入 i 後面的都無法讀入。這時怎麼辦?方法一 getline 讀入整行資料,它使用回車鍵輸入的換行符來確定輸入結尾。呼叫...