此代码中的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});
}
})
答案 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 */ }
}