C++中的整数和while循环..怎样

Integers and while loop in C++... how?

本文关键字:while 循环 怎样 整数 C++      更新时间:2023-10-16

I.e,我有这个代码:

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可以是任何数字,并且在程序中有未定义的行为。它有时可能会进入循环,有时可能不会。

如果最初将类似0的值分配给x,那么如果转换失败,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;
}

如果遇到错误条件(EOF、转换失败等),cin >> x将返回cin,该值在布尔上下文中计算为false。