仅允许0到1之间的数字

时间:2014-04-24 05:29:27

标签: c++ while-loop cin

我在下面有这个,但如果我输入一个字母,我会得到一个无限循环。

制作它的正确方法是什么,它只接受数字0到1,没有字母或其他字符。它应该接受0.1 x 0.5之间的数字

int alphaval = -1;
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;
}

3 个答案:

答案 0 :(得分:8)

请注意,如果输入意外类型的值(例如,当期望int时为字符串),则std::cin将处于错误状态。如果流处于无效状态,则它甚至无法读取有效输入,并且循环将无限运行。这似乎是你的情况,所以你需要清除流,因为流没有无效输入,你需要跳过它(使用ignore函数):

double alphaval; //it must be double or float (as per your requirement)

cin >> alphaval;    
while (alphaval < 0 || alphaval > 1)
{
    cout << "Invalid entry! Please enter a valid value: ";

    //FIX
    cin.clear();  //clear bad flags!
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); //skip bad input

    cin >> alphaval; //read fresh!
}

包含<limits>的{​​{1}}标头文件。

答案 1 :(得分:1)

将alphaval定义为float或double

double alphaval = 0.0;
//  YOUR CODE
cout << "Enter a number between 0 and 1";

答案 2 :(得分:1)

试试这个:

double alphaval = -1;
cout << "Enter a number between 0 and 1: ";
cin >> alphaval;
while (true)
{
    if(alphaval >= 0 && alphaval <= 1)
    {
        break;
    }
    else
    {
        cout << "Invalid entry! Please enter a valid value: ";
        cin >> alphaval;
    } 
}