我实施了一个测验代码并在最后做了一个简短的更改来检查用户是否正确回答了它。
我的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;
}
答案 0 :(得分:9)
showQuizDialog(rightA)
是否应该神奇地改变rightA
的值? (我假设你没有通过引用传递它。)
您的意思是写rightA = showQuizDialog(rightA)
还是rightA = quiz -> askQuestion(rightA)
?
此外,在您开启布尔值的switch
中,您是否期望除true
或false
以外的任何其他值?
答案 1 :(得分:0)
您的showQuizDIalog是一个按值调用的函数。因此,在调用showQuizDialog时,总是将函数的返回值存储到rightA中,即:
rightA = showQuizDialog(rightA);
否则,更改您的函数声明以允许传递引用,可能就像这样
showQuizDialog(&rightA);
并且无需从函数返回任何内容(只需在函数内使用指针而不是变量rightA)