当C ++中的if = false时,Bool = true

时间:2014-01-11 01:41:34

标签: c++ boolean

这可能是我的另一个新手错误,但我似乎找不到一个可以回答它的问题,而且我想如果我的公开无能帮助私人,那可能是最好的。无论如何,对自己手头的问题进行自我鞭..

在我的文字冒险标题中,我有一个这样的结构:

struct roomStruct
{
    // The room the player is currently in, and its interactive objects.
    string roomName;
    string size;
    bool exits[dirnum];
    bool rustyKeyIn;
    bool goldKeyIn;
        ...

这样的例子:

void genRooms(roomStruct *rms)
{
    // Generating the rooms of the house, and what items they contain
    rms[entrance].roomName.assign("the entrance hallway. It's a small room with an exit to the south.");
    rms[entrance].exits[north] = noexit;
    rms[entrance].exits[east] = noexit;
    rms[entrance].exits[south] = livingroom;
    rms[entrance].exits[west] = noexit;
    rms[entrance].rustyKeyIn = false;
    rms[entrance].goldKeyIn = false;

在int main()里面我有一个像这样的功能:

// Generate the world.
    roomStruct rooms[roomnum];
    genRooms(rooms);

进一步说,我有我认为是问题的区域:

// Check for items in the current room.
    if( rooms[currentRoom].rustyKeyIn = true )
    {
        cout << "A rusty key." << endl;
    }
    if( rooms[currentRoom].goldKeyIn = true )
    {
        cout << "A gold key." << endl;
    }
        ...

现在问题。没有编译器问题,但是当我运行代码时,每个房间都会列出每个项目,无论bool是设置为true还是false。毫无疑问,解决方案很简单,但它坚持要求我解决。

3 个答案:

答案 0 :(得分:3)

您错误地使用了assign运算符,它始终将rustyKeyIn设置为true并返回true。 所以你应该使用比较运算符operator ==

if( rooms[currentRoom].rustyKeyIn = true )

应该是

if( rooms[currentRoom].rustyKeyIn == true )
//                                ^^^

或者只是做

if (rooms[currentRoom].rustyKeyIn)

答案 1 :(得分:2)

您使用=代替==

当你这样做时:

if(a = true) {
    ...
}

如果将a设置为true,然后询问表达式的结果(a的新值)是否为真,那么它现在是。

你想要的是:

if(a == true) {
    ...
}

或者更简洁(也更常见):

if(a) {
    ...
}

答案 2 :(得分:0)

使用==表示相等,=表示作业。