cin.ignore()函數
cin.ignore()
是一個非常實用的函數,主要用于控制輸入流 cin
的行為
cin.ignore(int n = 1, char delimiter = EOF);
n
:一個整數參數,表示要忽略的字符數量。默認值是1,意味著只忽略下一個字符。delimiter
:一個可選的字符參數,表示停止忽略的邊界字符。當讀取到這個字符時,忽略操作停止,即使還沒有達到?n
?個字符。默認值是?EOF
(文件結束標志),在這種情況下,會一直忽略字符直到達到指定的數量?n
。
用途
-
清除緩沖區:當你從
cin
讀取輸入后,可能會有遺留的字符(比如用戶輸入的多余字符或者換行符)留在輸入緩沖區。使用cin.ignore()
可以幫助清除這些不需要的字符,保持輸入的清潔。 -
跳過特定字符:如果你想在讀取輸入前跳過某些特定字符(比如換行符
\n
),可以使用cin.ignore()
并指定相應的停止字符。 -
準備下一次讀取:在連續讀取輸入時,特別是在混合使用
cin
的不同成員函數(如>>
運算符與getline()
)時,使用cin.ignore()
可以避免因緩沖區中殘留的字符導致的錯誤讀取。
int number;
std::string line;
// 讀取一個整數
std::cin >> number;
// 忽略剩余的輸入行,包括換行符
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
// 現在可以安全地讀取一整行文本
std::getline(std::cin, line);
std::cout << "You entered: " << number << "\nLine: " << line << std::endl;
cin.ignore()
被用來丟棄輸入緩沖區中用戶輸入整數后的任何剩余字符,特別是換行符,這樣 getline()
就能正確讀取接下來的一整行文本。如果不使用 cin.ignore()
,getline()
可能會立即讀取到緩沖區中的換行符,導致看起來像是什么都沒輸入。
stoll函數
C++中,stoll
函數用于將字符串轉換為long long
類型的整數。這個函數非常實用,特別是在處理大整數或者從用戶輸入、文件等來源讀取整數數據時。
long long stoll(const std::string& str, std::size_t* pos = nullptr, int base = 10);
str
:要轉換的字符串。pos
:一個可選的輸出參數,用于存儲第一個未被轉換的字符的位置。如果轉換成功,它將指向字符串中的下一個字符;如果輸入無效,它將不被修改。base
:一個整數,表示用于解釋字符串的基數,默認為10(即十進制)。你可以指定2到36之間的任何值來處理二進制到三十六進制的數字。
#include <iostream>
#include <string>
#include <stdexcept>
int main() {try {std::string numberStr = "1234567890123456789";long long number = std::stoll(numberStr);std::cout << "The number is: " << number << std::endl; // 使用不同的基數std::string hexStr = "1A";long long hexNumber = std::stoll(hexStr, nullptr, 16);std::cout << "Hexadecimal '1A' as decimal is: " << hexNumber << std::endl; // 錯誤處理示例std::string invalidStr = "123abc";long long invalidNumber = std::stoll(invalidStr);} catch (const std::invalid_argument& ia) {std::cerr << "Invalid argument: " << ia.what() << std::endl;} catch (const std::out_of_range& oor) {std::cerr << "Out of range error: " << oor.what() << std::endl;}return 0;
}
?stoll
首先用于將一個非常大的十進制字符串轉換為long long
類型。接著,演示了如何使用基數16來轉換十六進制字符串。最后,嘗試將包含非法字符的字符串轉換為數字,這將拋出std::invalid_argument
異常,展示了如何捕獲并處理這種錯誤情況。如果轉換的結果超出了long long
所能表示的范圍,還會拋出std::out_of_range
異常。