2013-12-11 135 views
0

我實施了一個測驗代碼,並在其結尾做了一個短暫的更改,以檢查用戶是否正確回答了它。C++返回布爾總是假?

我的if/else是這樣的:

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

    return rightA; 

我已經用,如果輸入了正確的答案不言而喻rightA =真正的調試檢查;並返回,所以這工作finder。 但是,如果我檢查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); 


    } 

我有點hintless。我可能有一些邏輯上的失敗,現在我只是看不到。 問候

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; 
} 
+0

爲什麼不顯示代碼?我們仍然猜測'showQuizDialog'是什麼? –

+0

'return rightA;'確實意味着你返回答案,而不是改變參考參數。 – RichardPlunkett

回答

9

showQuizDialog(rightA)應該幻化的rightA價值? (我假設你沒有通過引用傳遞它)。

您是不是要編寫rightA = showQuizDialog(rightA)rightA = quiz -> askQuestion(rightA)

此外,在開關布爾的switch中,您是否期待除true或之外的其他任何值?

+2

開關布爾是很有趣的,我不認爲我以前見過,更不用說第三+州的默認條款! 我不知道有多少加號是爲了貶低它的值:) – RichardPlunkett

+1

@RichardPlunkett這是永遠不可能達到的(因爲'bool'變量總是'true'或'false'。但是OP顯然不理解'bool' 'if(answer == rightanswer)...'而不是簡單的'rightA = answer == rightanswer'。或者只是'return answer == rightanswer;',在實際的情況下)。 –

+0

@JamesKanze可以設計一個但是看到示例代碼,我懷疑OP聽說過它:) –

0

您的showQuizDIalog是一個按值調用的函數。所以總是存儲功能分爲rightA的返回值,調用showQuizDialog的時候,那就是:

rightA = showQuizDialog(rightA); 

否則,改變你的函數聲明允許傳遞通過引用,也許這樣

showQuizDialog(&rightA); 

並且無需從函數中返回任何東西(只需使用指針而不是函數內部的變量rightA)

+0

Downvoter,請評論。 – SoulRayder