首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只允许从0到1之间的数字

只允许从0到1之间的数字
EN

Stack Overflow用户
提问于 2014-04-24 05:29:27
回答 3查看 1.8K关注 0票数 1

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

怎样才能使它只接受0到1的数字,而不接受字母或其他字符。它应该接受0.1至0.5之间的数字

代码语言:javascript
复制
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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-24 05:33:45

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

代码语言:javascript
复制
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<>头文件。

票数 8
EN

Stack Overflow用户

发布于 2014-04-24 05:34:57

将字母定义为浮动或双

代码语言:javascript
复制
double alphaval = 0.0;
//  YOUR CODE
cout << "Enter a number between 0 and 1";
票数 1
EN

Stack Overflow用户

发布于 2014-04-24 06:04:39

试试这个:

代码语言:javascript
复制
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;
    } 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23260523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档