【问题标题】:C++ returning bool is always false?C++ 返回 bool 总是假的?
【发布时间】:2013-12-29 05:13:59
【问题描述】:

我实现了一个测验代码,并在其末尾做了一个简短的更改,以检查用户是否正确回答。

我的 if / else 看起来像这样:

   if (answer == rightanswer){
        rightA = true;
    }
    else {
        rightA = false;
    }

    return rightA;

我已经用调试器检查过,如果输入了正确的答案,它会转到 rightA = true;并返回,所以这很有效。 但如果我检查 rightA 的值,它是错误的。 如果需要,这里是我用来调用测验的函数:

void gameOver(char field[HEIGHT][WIDTH], char newField[HEIGHT][WIDTH]){ // TODO

    bool rightA = false;
    showQuizDialog(rightA);
    do{
    system("cmd /c cls");

    switch (rightA){
        case true : cout << "menu"; menu(field, newField); break;
        case false : showQuizDialog(rightA); break;
        default : cout << " ";
    }
    }while(rightA == false);


    }

我有点不知所措。我可能有一些逻辑错误,我现在看不到。 问候

E:我不想用代码轰炸你们。但就是这样:

bool showQuizDialog(bool rightA){

    Quiz* quiz = Quiz::getInstance();
    quiz -> askQuestion(rightA);
        return rightA;


}

以及完整的问题:

    bool Quiz::askQuestion(bool rightA) {

    int fragenID = rand() % this->fragen.size(); //zufällige Fragen auswählen
    struct Question frage = this->fragen.at(fragenID);
    std::cout << frage.frage.c_str() << std::endl << endl; //Frage stellen

    int rightanswer = this->listAnswers(frage.antworten);
    int answer = this->readAnswer(0, frage.antworten.size() - 1);

    if (answer == rightanswer){
        rightA = true;
    }
    else {
        rightA = false;
    }

    return rightA;
}

【问题讨论】:

  • 为什么不显示代码?我们只能猜测showQuizDialog 是什么?
  • return rightA; 确实暗示您返回答案,而不是更改参考参数。

标签: c++ boolean return


【解决方案1】:

showQuizDialog(rightA) 是否应该神奇地改变rightA 的值? (我假设您没有通过引用传递它)。

您的意思是写rightA = showQuizDialog(rightA) 还是rightA = quiz -&gt; askQuestion(rightA)

另外,在你的switch 中,你是否期望truefalse 之外的任何其他值?

【讨论】:

  • 打开布尔值很有趣,我想我以前从未见过,更不用说第三个以上状态的默认子句了!!!我想知道蔑视价值有多少好处:)
  • @RichardPlunkett 永远无法达到(因为bool 变量始终为truefalse。但OP 显然不理解bool(例如if ( answer == rightanswer )... 而不是只是rightA = answer == rightanswer。或者只是return answer == rightanswer;,在实际上下文中)。
  • @JamesKanze 可以设计一个布尔值。但是看到示例代码,我怀疑 OP 听说过 :)
  • 我知道,不过,现在我想知道 OP 有什么防御措施吗?好吧,如果这是 C,而不是 C++,它是旧的 C,而不是 99 后,那么 bool 可能是 int/char 的类型 def,而 true/false 是 0/1 的宏,因此可以想象它可以被激活。 @BЈовић,在你把你的帖子放进去之前,我的帖子更有意义:)
  • 老实说,我没有任何防御措施,但我试图找出我的失败并用 switch 重写我之前的 if/else。我也是今年 10 月开始编程的,所以我才刚刚开始。我敢打赌,我们都犯了一些错误或愚蠢的失败。
【解决方案2】:

您的 showQuizDIalog 是一个按值调用的函数。所以总是把函数的返回值存入rightA,在调用showQuizDialog的时候,也就是:

rightA = showQuizDialog(rightA);

否则,更改您的函数声明以允许按引用传递,可能像这样

showQuizDialog(&rightA);

并且不需要从函数中返回任何东西(只需在函数内使用指针而不是变量rightA)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多