繁体   English   中英

C ++返回布尔值总是错误的吗?

[英]C++ returning bool is always false?

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

我的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;


}

以及完整的askquestion问题:

    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(rightA)应该神奇地更改rightA的值? (我假设您没有通过引用传递它)。

您是要写rightA = showQuizDialog(rightA)还是rightA = quiz -> askQuestion(rightA)吗?

另外,在switch bool的开关中,您期望除truefalse之外的其他值吗?

您的showQuizDIalog是一个按值调用函数。 因此,在调用showQuizDialog时,始终将函数的返回值存储在rightA中,即:

rightA = showQuizDialog(rightA);

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

showQuizDialog(&rightA);

且无需从函数返回任何内容(只需在函数内部使用指针而不是变量rightA)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM