一、忽略輸入流中的字符
在C++中,我們可以通過cin.get()函數來讀取輸入流中的一個字符,而cin.ignore()則可以幫助我們忽略輸入流中的字符。該函數的基本語法如下:
cin.ignore([n], [delim]);
其中,n為要忽略的字符數;delim為要忽略的結束字符,可以省略。如果省略delim,則函數默認忽略換行符(”\n”)。
比如說,我們可以使用以下代碼從輸入流中獲取一個整數,並忽略輸入流中的前5個字符:
int num; cin.ignore(5); cin >> num;
在執行上述代碼時,輸入流中前5個字符(包括空格、換行符等)會被忽略,然後程序會讀取輸入流中的下一個整數並賦值給num。
二、捨棄輸入流的殘留字符
除了可以通過忽略特定字符數來達到捨棄輸入流部分字符的目的外,cin.ignore()還可以幫助我們捨棄輸入流中的殘留字符。
比如說,如果我們在從輸入流中讀取字符串後,想要移除剩餘的字符,可以使用以下代碼:
string str; cin >> str; cin.ignore(10000, '\n'); // 忽略10000個字符或遇到換行符
上述代碼中,cin.ignore(10000, ‘\n’)忽略了輸入流中接下來的10000個字符或者遇到換行符,以此達到清空輸入流的目的。
三、避免cin.get()遺留的換行符問題
如果在代碼中先使用了cin.get()函數獲取一個字符,再使用getline()函數獲取一行字符串,會遇到如下問題:由於cin.get()函數會把最後的換行符留在輸入流中,getline()函數接收到這個換行符時就會認為輸入結束了,從而無法正常讀取字符串。
這時,我們就可以使用cin.ignore()函數來忽略輸入流中的換行符:
char ch; cin.get(ch); cin.ignore(10000, '\n'); // 忽略輸入流中的換行符 string str; getline(cin, str);
使用cin.ignore()函數可以避免一些由於換行符問題帶來的預料之外的程序行為。
四、防範輸入流中的垃圾字符
當我們從輸入流中讀取數字或字符串時,經常會遇到一些輸入錯誤的情況。比如說,用戶可能會在輸入數字時不小心輸入了一個字符,或者輸入了一些超出範圍的數字。這時,cin.ignore()也可以幫助我們處理這種情況。
以讀取一個整數為例:
int num; while (!(cin >> num)) { cin.clear(); // 清空輸入標誌位 cin.ignore(10000, '\n'); // 忽略輸入流中的字符,包括換行符 cout << "請輸入一個整數:" << endl; }
如果用戶輸入了一個非數字字符,cin >> num的值將為0,可以使用while循環和cin.ignore()函數來處理這種情況。cin.clear()可以清空輸入流標誌位,避免上述代碼死循環。
原創文章,作者:UKSW,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/134534.html