嵌套循环重复自身很可能是因为不正确的booleann运算符c ++

时间:2014-12-21 15:47:19

标签: c++ console-application nested-loops do-while

我的问题是第二个do while循环重复自己如果我输入除了1以外的任何东西。如果我输入1,当它询问我是否确定它退出循环,但任何其他数字只是使控制台窗口继续重复它的问题而不给我机会回答。我只用了不到一周的C ++,但我认为这些问题就是问题所在。

} while ( x != 2 || 1);
} while (x != 1);

#include <iostream>
#include <string>
using namespace std;
struct adress{
    string name;
    string adress;
    int phonenumber;
};
adress fillform()
{
    int x;
    adress form;
    do{
        cout << "What's your name" << endl;
        cin >> form.name;
        cout << "What's your adress" << endl;
        cin >> form.adress;
        cout << "What's your phone number" << endl;
        cin >> form.phonenumber;
        cout << "Your name is " << form.name << endl;
        cout << "Your adress is " << form.adress << endl;
        cout << "Your phone number is " << form.phonenumber << endl;
        do{
            cout << "Is this information correct?\n1. Yes 2. No" << endl;
            cin >> x;
            switch ( x )
            {
            case 1:
                cout << "Okay" << endl;
                break;
            case 2:
                cout << "Try again" << endl;
            default:
                cout << "Invalid answer" << endl;
            }
        } while ( x != 2 || 1);
    } while (x != 1);
    return form;
}
int main()
{
    fillform();
}

4 个答案:

答案 0 :(得分:2)

x != 2 || 1代表(x != 2) || 1,它始终为真。

您需要x != 2 && x != 1

答案 1 :(得分:1)

x != 2 || 1表示

  • 当&#34; x不是两个&#34;是真的,或
  • 当1为真时

(或两者)。

真假分别等于1和0,因此1总是如此。

我想象你真正想要的是

x != 2 && x != 1,表示

  • 当x不是2时,
  • 当x也不是1时

您可能需要查看operator precedence以确定哪些运算符首先应用,并且还要记住每个运算符之间需要完整的可评估短语。换句话说,如果你想要&#34; X是A或B&#34;,你需要说&#34; X是A或X是B&#34;。

答案 2 :(得分:0)

检查您的运营商优先级(这是表格的相关摘要)。

你的“!=”在“||”之前绑定,使表达式始终为真

((x!= 2)|| 1)变为(1)

这解释了你所看到的问题。如果您确实想检查所有优先规则或采取打印副本,请点击以下链接:C++ operator precedence table

9   ==   != For relational = and ≠ respectively
10  &   Bitwise AND
11  ^   Bitwise XOR (exclusive or)
12  |   Bitwise OR (inclusive or)
13  &&  Logical AND
14  ||  Logical OR

答案 3 :(得分:0)

问题是1,因为1总是正确的,并且1对OR的东西总是如此。