C++ 仅允许0到1之间的数字

C++ 仅允许0到1之间的数字,c++,while-loop,cin,C++,While Loop,Cin,我有下面这个,但如果我输入一个字母,我会得到一个无限循环 正确的方法是什么,使它只接受数字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

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

正确的方法是什么,使它只接受数字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;
}
intalphaval=-1;
cout>alphaval;
而(alphaval<0 | | alphaval>1)
{
cout>alphaval;
}

请注意,如果输入意外类型的值(如需要int时的字符串),则
std::cin
将处于错误状态。如果流处于无效状态,那么它将无法读取甚至有效的输入,循环将无限运行。这似乎是您的情况,因此您需要清除流,因为流不包含无效输入,您需要跳过它(使用
忽略
函数):

double-alphaval//必须是双倍或浮动(根据您的要求)
cin>>alphaval;
而(alphaval<0 | | alphaval>1)
{
cout>alphaval;//读新鲜的!
}

包含
std::numeric_limits的头文件

请注意,如果输入意外类型的值(如需要int时的字符串),则
std::cin
将处于错误状态。如果流处于无效状态,那么它将无法读取甚至有效的输入,循环将无限运行。这似乎是您的情况,因此您需要清除流,因为流不包含无效输入,您需要跳过它(使用
忽略
函数):

double-alphaval//必须是双倍或浮动(根据您的要求)
cin>>alphaval;
而(alphaval<0 | | alphaval>1)
{
cout>alphaval;//读新鲜的!
}

包含
头文件,用于
std::numeric_limits

将alphaval定义为float或double

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

不能将alphaval定义为float或double

double alphaval = 0.0;
//  YOUR CODE
cout << "Enter a number between 0 and 1";
double alphaval=0.0;
//你的代码
试试这个:

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;
    } 
}
double alphaval=-1;
cout>alphaval;
while(true)
{
如果(alphaval>=0&&alphaval-alphaval;
} 
}
试试这个:

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;
    } 
}
double alphaval=-1;
cout>alphaval;
while(true)
{
如果(alphaval>=0&&alphaval-alphaval;
} 
}

alphaval是如何声明的?它是在此之前声明的,很抱歉忘了放置它。如果您试图读取一个double,您通常不想声明一个
int
类型来保存它。alphaval是如何声明的?它是在此之前声明的,很抱歉忘了放置它。如果您试图读取一个double,您通常不想声明
int键入以保留它。@crclayton:
int
将不会读取
.57
例如!流将失败并处于无效状态。@Nawaz如果声明为int,则不应将
.57
读取为
0
?@Tahlil:否…。当它看到
时,它将失败。请注意这种转换(如您所想的,浮点转换为int)从流中读取值时未完成。@user3398034:您希望我“想象”您当前的代码是什么,还是希望我“查看”它是为了帮助你吗?我很抱歉,我看到了一些错误,它起了作用。@crclayton:
int
将不会读取
.57
例如!流将失败,并将处于无效状态。@Nawaz如果声明为int,它不应该将
.57
作为
0
读取吗?@Tahlil:No….当它看到
注意t从流中读取值时,这种转换(您似乎认为是浮点到int)没有完成。@user3398034:您想让我“想象”您当前的代码是什么,还是想让我“看到”它以帮助您?我很抱歉,我看到了一些错误,它起了作用。