仅允许0到1之间的数字

use*_*034 1 c++ cin while-loop

我在下面有这个,但如果我输入一封信,我会得到一个无限循环.

是什么方法使它只接受数字0到1,没有字母或其他字符.它应该接受0.1之间的数字等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;
}
Run Code Online (Sandbox Code Playgroud)

Naw*_*waz 8

请注意,std::cin如果输入意外类型的值(例如,当期望int时为字符串),则将处于错误状态.如果流处于无效状态,则它甚至无法读取有效输入,并且循环将无限运行.这似乎是你的情况,所以你需要清除流,因为流没有无效的输入,你需要跳过它(使用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!
}
Run Code Online (Sandbox Code Playgroud)

包含<limits>头文件std::numeric_limits<>.