2014-04-23 125 views
0

我想做一個用戶只能輸入0到1的cin。如果用戶不輸入這些數字,那麼他應該得到一個錯誤,說「請在0到1的範圍內輸入」。CIN在一定範圍內

但它不工作。

我在做什麼錯了?

int alphaval = -1; 
    do 
    { 
     std::cout << "Enter Alpha between [0, 1]: "; 
     while (!(std::cin >> alphaval)) // while the input is invalid 
     { 
      std::cin.clear(); // clear the fail bit 
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // ignore the invalid entry 
      std::cout << "Invalid Entry! Please Enter a valid value: "; 
     } 
    } 
    while (0 > alphaval || 1 < alphaval); 

    Alpha = alphaval; 
+0

什麼是不工作? –

+0

「0到1」或「0或1」 –

+0

0或1如果我不輸入它,它不會要求我輸入錯誤 – user3398034

回答

1

試試這個:

int alphaval; 
cout << "Enter a number between 0 and 1: "; 
cin >> alphaval; 
while (alphaval < 0 || alphaval > 1) 
{ 
     cout << "Invalid entry! Please enter a valid value: "; 
     cin >> alphaval; 
} 
1

如果你想陷阱空行我會使用std::getline,然後解析字符串是否輸入是有效的。

事情是這樣的:

#include <iostream> 
#include <sstream> 
#include <string> 

int main() 
{ 
    int alphaval = -1; 
    for(;;) 
    { 
     std::cout << "Enter Alpha between [0, 1]: "; 

     std::string line; 
     std::getline(std::cin, line); 
     if(!line.empty()) 
     { 
      std::stringstream s(line); 
      //If an int was parsed, the stream is now empty, and it fits the range break out of the loop. 
      if(s >> alphaval && s.eof() && (alphaval >= 0 && alphaval <= 1)) 
      { 
       break; 
      } 
     } 
     std::cout << "Invalid Entry!\n"; 
    } 
    std::cout << "Alpha = " << alphaval << "\n"; 

    return 0; 
} 

如果你想在錯誤不同的提示,然後我把初始提示外循環和改變內部提示你喜歡什麼。