即,我有此代码:
int main {
cin >> x;
while (x != 1 && x != 2 && x != 3) {
cout << "Invalid input, try again!" << endl;
cin >> x;
}
cout << "Hello, World";
}
当整数变量“ x”为1、2或3时,它应返回“ Hello,World”。
但是,当我键入非整数值(即“ Hello”)时,为什么它会循环运行?
根据您定义和初始化的方式x
,它可能会在您每次输入非整数时进入循环,或者有时仅会进入循环。
如果您没有为分配任何值x
,那么在您输入非整数x
之后,的值仍然不确定cin >> x
,因为转换失败,因此没有值被写入x
。因此x
实际上可以是任何数字,并且您的程序中有未定义的行为。有时可能会进入循环,有时可能不会。
如果x
最初给您分配了类似0的值,那么x
如果转换失败,由于其值未更改,其值仍将为0,因此循环条件为true,并且将进入循环。
一种选择是仅在转换成功的情况下循环,您可以这样做:
int main(void) {
while ((cin >> x) && x != 1 && x != 2 && x != 3) {
cout << "Invalid input, try again!" << endl;
}
cout << "Hello, World";
return 0;
}
cin >> x
将返回cin
,如果遇到错误条件(EOF,转换失败等),则在布尔上下文中计算为false。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句