2014-09-24 27 views
-5

也就是说,我有这样的代码:C++中的整数和while循环...怎么样?

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

但是,当我键入一个非整数值(即“你好”),它为什么会进入循环?

+0

你必须在'std :: cin >>'后检查错误(并重置它)。 – Jarod42 2014-09-24 15:00:49

+0

我该怎么做? – 2014-09-24 15:01:49

+0

看看[error-handling-in-c](http://stackoverflow.com/questions/3824921/error-handling-in-c) – Jarod42 2014-09-24 15:03:14

回答

3

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

如果不指定任何值x,那么xcin >> 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,如果遇到错误状况,其评价为false布尔上下文(EOF ,转换失败等)。

+0

谢谢,它的工作原理。 – 2014-09-24 15:23:26