0
我正在製作一個程序,用戶必須通過輸入1,2或3來選擇一個選項。我能夠檢測到他們輸入的數字並讓程序重複如果他們使用switch語句輸入除這些以外的其他號碼。每次我輸入一封信時,程序都會每秒重複提示數百次。如何在繼續之前檢查變量以確保其中包含int。我有一種感覺,它會涉及到使用一個字符串,然後檢查它,以確保它包含一個int然後轉換它,如果我能有一個這樣的代碼的例子,它會很好。謝謝C++檢測用戶是否輸入字符串而不是輸入
我正在製作一個程序,用戶必須通過輸入1,2或3來選擇一個選項。我能夠檢測到他們輸入的數字並讓程序重複如果他們使用switch語句輸入除這些以外的其他號碼。每次我輸入一封信時,程序都會每秒重複提示數百次。如何在繼續之前檢查變量以確保其中包含int。我有一種感覺,它會涉及到使用一個字符串,然後檢查它,以確保它包含一個int然後轉換它,如果我能有一個這樣的代碼的例子,它會很好。謝謝C++檢測用戶是否輸入字符串而不是輸入
您應該總是驗證您已成功讀取所需的輸入。如果輸入失敗了,你可能想擺脫違規字符,然後重試:
int value(0);
while (!(std::cin >> value)) {
std::cout << "you entered a non-digit character\n";
std::cin.clear(); // make sure that std::cin is happy to do something
std::cin.ignore(); // ignore the offending character
}
當輸入失敗,則std::ios_base::failbit
被設置在流和數據流不會轉換爲true
(或者不操作應用於流的!
返回true
)。一旦設置了std::ios_base::failbit
,流將拒絕任何進展,直到該位再次被清除。使用clear()
您可以重置錯誤位。然而,一旦位被重置,違規字符仍然在輸入中。要擺脫下一個字符,您可以使用ignore()
。如果你覺得你想忽略整行輸入,你會使用類似於
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
檢查輸入操作的結果。 – chris
和代碼?.. – 0x499602D2
你只能存儲第一個字符,並檢查ascii值是否是一個數字,如果你只是做1-3有效輸入 – Ken