无法检查非整数输入

时间:2018-11-12 11:25:47

标签: c++

此代码中的else语句不会执行,相反,当输入一个字符时,它将陷入连续循环中,并重复第33和35行。

我想检查else语句中用户输入的值是否不是整数,然后再次要求用户指定年龄。

Try this : 

    this.voucherVerifyUserDataFormGroup.valueChanges.subscribe((form : any) =>{
     //check your condition : 

    if(form.barcode != '' || (form.reservationCode != '' && form.secretCode != '')){
     this.voucherVerifyUserDataFormGroup.setErrors(null);
    }
    else
    {
     this.voucherVerifyUserDataFormGroup.setErrors({ 'invalid': true});
    }
    })

3 个答案:

答案 0 :(得分:3)

您需要检查输入操作是否成功。最简单的方法是:

if (cin >> age) {
    // now use age
} else {
    // error
}

另一种等效的方法:

cin >> age;
if (!cin) {
    // error
}

答案 1 :(得分:2)

问题是cin >> age会将一个整数读入age(这是age可以存储的唯一内容),而无论是什么整数(对于非整数,它都是0数字),它会大于或小于18,因此为什么您的其他情况永远都不会发生。

要检测无效输入,您需要读取一个字符串,然后检查该字符串是否代表有效的整数。

答案 2 :(得分:1)

使用std::cin::fail检查用户输入是否为整数。

其次,请避免使用goto进行最大程度的练习,因为它会产生Spaghetti code结构。您可以使用goto循环替换while,如下所示:

while (true) 
{
    // code
    std::cin >> age;
    if (!std::cin.fail() && age >= 18) // if cin not failed && the codition
    { 
        /* do something */
        break;   // break the loop!
    }
    else if (!std::cin.fail() && age < 18)  // if cin not failed && the codition
    {  
        /* do something  goto removeed */   
    }
    else { std::cout << "INVALID INPUT!" << std::endl; /* goto removeed */ }
}