2017-07-25 28 views

回答

0

std::cin.ignore()可以稱爲三種不同的方式:

無參數:一個單個字符從輸入緩衝器中取出並丟棄:

std::cin.ignore(); //discard 1 character 

一個參數:指定的字符數取自輸入緩衝區並丟棄:

std::cin.ignore(33); //discard 33 characters 

兩個參數:丟棄指定的字符數,或丟棄字符至多幷包括指定的分隔符(以先到者爲準):

std::cin.ignore(26, '\n'); //ignore 26 characters or to a newline, whichever comes first 

源:http://www.augustcouncil.com/~tgibson/tutorial/iotips.html

+0

建議的忽略是'std :: cin.ignore(std :: numeric_limits :: max(),'\ n');',但是當在一般意義上使用它時,必須要小心一點。如果它沒有找到換行符,它可能會等待幾個kaijuzillion字符,這幾乎浪費了每個人的時間。 – user4581301

+0

ty爲小費和這個詞「kaijuzillion」我愛它。 – Romeo

+0

'std :: numeric_limits :: max()'不僅僅是一個大數字。對於ignore()來說,這是一種特殊情況,它會禁用計數,因此會消耗所有直到幷包括分隔符的字符。 – Blastfurnace

1

在C++中的輸入處理,cin.fail()將返回true如果最後的cin命令失敗。

通常,cin.fail()將在下列情況下返回true:

  1. 隨時到達EOF並嘗試讀什麼,cin.fail()將返回true。
  2. 如果您嘗試讀取整數並且它收到無法轉換爲整數的內容。

cin.fail()返回true併發生錯誤時,輸入緩衝區cin被置於「錯誤狀態」。該州將阻止進一步的輸入處理。因此,您必須使用cin.clear()。它將覆蓋流內部錯誤標誌的當前值=>如果狀態爲好,則所有位都由處於狀態的那些位取代。所有錯誤標誌都被清除。


cin.ignore對於中,首先將通過第一構造sentry對象訪問輸入序列。之後,它會從其關聯的流緩衝區對象中提取字符,就像調用其成員函數sbumpcsgetc一樣,最後在返回之前銷燬該哨兵對象。

因此,它通常用於執行提取和丟棄字符。 cin.ignore的一個典型例子是,當在cin之後使用getline()時,它會在緩衝區中留下換行符,直到您切換功能爲止。那爲什麼你必須刷新緩衝區外的新行。