我在下面有这个,但是如果我输入字母,我会陷入无限循环。
使其仅接受数字0到1,而不接受字母或其他字符的正确方法是什么?它应该接受介于0.1 ect 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;
}
最佳答案
请注意,如果您输入意外类型的值(例如,当预期为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>
的std::numeric_limits<>
头文件。关于c++ - 只允许0到1之间的数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23260523/