2013-07-26 35 views
1

如何限制用戶只能在C++程序中輸入實數?限制用戶只能在C++中輸入實數

實施例:

雙號; cin >>編號;

,它不會接受像輸入:「12add」,「ABCD」等等......

可有人指導我嗎?使用bool值。 謝謝!

回答

0

不幸的是,你不能避免它...你可以接受一個字符串作爲輸入,並解析字符串(也許與正則表達式)的正確性。

0

您可以檢索您的數據爲std::string,然後使用標準字符串轉換函數之一來查看內容是否符合您的期望。

0

這是一些僞代碼;

double num; 

while(num != realNum) //check input is valid 
{ 
    cin >> num; 
} 
.... 
+2

sudo =「** S ** uper ** U ** ser ** DO **」(或可能是「** S ** ubstitute ** U ** ser ** DO **」。Pseudo =「假」。 – BoBTFish

0

您無法限制鍵盤上的用戶類型。您可以接受它std::string並使用boost::lexical_cast將其轉換爲您的預期號碼類型並捕獲並處理boost::bad_lexical_cast異常。

2

您無法強制用戶輸入正確的信息。但如果以前無效,您可以要求他們提供另一個輸入。有不同的程序可以這樣做。是下列其中一項:

  1. 使用getline讀取線
  2. 解析和理解線
  3. 如果線是無效的,給錯誤的用戶並轉到1

這是正常的而且很常見。它使用動態內存。另一種選擇是:

  1. 使用cin >> value;就像你通常做
  2. 檢查cin.fail(),看是否輸入正確讀取(檢查cin.eof()也)
  3. 如果失敗,忽略所有輸入,直到空白:

    char c; 
    while (cin >> c) 
        if (isspace(c)) 
         break; 
    

這有一個額外的好處,在這樣的錯誤輸入:

abc 12.14 

你不要忽略整條線,而只是abc

0
double number 
if (cin >> number) { 
    do_stuff_with(number); 
} else { 
    std::cerr << "That wasn't a number!"; 
} 
0

您可以使用正則表達式來解決它

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); 
} 

請記住,包括頭的正則表達式庫。