如何限制用戶只能在C++程序中輸入實數?限制用戶只能在C++中輸入實數
實施例:
雙號; cin >>編號;
,它不會接受像輸入:「12add」,「ABCD」等等......
可有人指導我嗎?使用bool值。 謝謝!
如何限制用戶只能在C++程序中輸入實數?限制用戶只能在C++中輸入實數
實施例:
雙號; cin >>編號;
,它不會接受像輸入:「12add」,「ABCD」等等......
可有人指導我嗎?使用bool值。 謝謝!
不幸的是,你不能避免它...你可以接受一個字符串作爲輸入,並解析字符串(也許與正則表達式)的正確性。
您可以檢索您的數據爲std::string
,然後使用標準字符串轉換函數之一來查看內容是否符合您的期望。
這是一些僞代碼;
double num;
while(num != realNum) //check input is valid
{
cin >> num;
}
....
您無法限制鍵盤上的用戶類型。您可以接受它std::string
並使用boost::lexical_cast
將其轉換爲您的預期號碼類型並捕獲並處理boost::bad_lexical_cast
異常。
您無法強制用戶輸入正確的信息。但如果以前無效,您可以要求他們提供另一個輸入。有不同的程序可以這樣做。是下列其中一項:
getline
讀取線這是正常的而且很常見。它使用動態內存。另一種選擇是:
cin >> value;
就像你通常做cin.fail()
,看是否輸入正確讀取(檢查cin.eof()
也)如果失敗,忽略所有輸入,直到空白:
char c;
while (cin >> c)
if (isspace(c))
break;
這有一個額外的好處,在這樣的錯誤輸入:
abc 12.14
你不要忽略整條線,而只是abc
。
double number
if (cin >> number) {
do_stuff_with(number);
} else {
std::cerr << "That wasn't a number!";
}
查看sscanf
函數。
您可以使用正則表達式來解決它
double inputNumber()
{
string str;
regex regex_double("-?[0-9]+.?[0-9]+");
do
{
cout << "Input a positive number: ";
cin >> str;
}while(!regex_match(str,regex_double));
return stod(str);
}
請記住,包括頭的正則表達式庫。
sudo =「** S ** uper ** U ** ser ** DO **」(或可能是「** S ** ubstitute ** U ** ser ** DO **」。Pseudo =「假」。 – BoBTFish