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

时间:2014-09-24 14:58:35

标签: c++

即,我有这段代码:

int main {
   cin >> x;
    while (x != 1 && x != 2 && x != 3) {
        cout << "Invalid input, try again!" << endl;
        cin >> x;
    }
    cout << "Hello, World";
}

它应该返回&#34; Hello,World&#34;当整数变量&#34; x&#34;是1,2或3。

但是,当我输入一个非整数值(即&#34; Hello&#34;)时,为什么它会进入循环?

1 个答案:

答案 0 :(得分:3)

根据您定义和初始化x的方式,每次输入非整数时它可能会进入循环,或者有时只会进入循环。

如果您没有为x分配任何值,那么如果输入非整数,x之后cin >> x的值仍未定义,因为转换失败并且因此,x没有写入任何值。所以x可以是字面上的任何数字,并且您的程序中有未定义的行为。它有时会进入循环,有时可能不会进入循环。

如果最初将{0}分配给x,那么如果转换失败,x的值仍然为0,因为它没有改变,因此循环条件为真,循环将被输入。

一个选项是仅在转换成功时循环,您可以这样做:

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。