简体   繁体   中英

C++ counter variable not working properly

I am writing a program that asks a user for a difficulty level then gives them multiplication questions while counting the correct answers. My issue is my counter ( numCorrect ) updates for false answers too and I can't understand why. Can someone tell me why?

int main()
{
    int n; //difficulty level
    int a, b, atimesb;  // random generated numbers and multiplication 
    string name;
    int numCorrect=0;  // initilize counter to 0
    int numAsked=0;     // initilize counter to 0
    int exitCond = 1;   // loop condition continue

    cout << "this program tests your multiplication skills!" << endl;
    cout << "what is your name?" << endl;
    getline(cin, name);
    cout << " Enter a difficulty level" << endl;
    cin >> n; // user input for difficulty level

    while (exitCond != 0) //  loop to continue asking until user ends with 0
    {
        MakeQuestion(n, a, b, atimesb);  // calls function to make a question

        UserAnswerIsCorrect(a, b, atimesb);  // calls function to ask question and evaluate it

        if (UserAnswerIsCorrect) // update if correct
        {
            numCorrect++;
        }

        numAsked++; // update total questions

        cout << " Enter 0 to quit, 1 to go again" << endl;
        cin >> exitCond; // user input for difficulty level

    }
    PrintScore(numCorrect, numAsked);  // calls function to print score
    return 0;
}
int NewRandomNumber(int n)
{
    int val;
    val = rand() % n + 2; // creates a number between 2 and n
    return val;
}
void MakeQuestion(int n, int& a, int& b, int& atimesb)
{
    a = NewRandomNumber(n);
    b = NewRandomNumber(n);
    atimesb = a*b;

    return;
}
bool UserAnswerIsCorrect(int a, int b, int atimesb)
{
    int userAns;
    cout << a << "X" << b << "=" << endl;
    cin >> userAns; 
    if (userAns == atimesb)
    {
        cout << "Correct!";

        return true;
    }
    else
    {
        cout << "false, correct answer is:" << atimesb << endl;
        return false;
    }
}
void PrintScore(int numCorrect, int numAsked)
{
    cout << "your score is: " << numCorrect << "/" << numAsked << " or " <<
        (numCorrect / numAsked) * 100 << "%" << endl;
    return;
}
UserAnswerIsCorrect(a, b, atimesb);  // calls function to ask question and evaluate it

    if (UserAnswerIsCorrect) // update if correct
    {
        numCorrect++;
    }

should be

    if (UserAnswerIsCorrect(a, b, atimesb)) // update if correct
    {
        numCorrect++;
    }

You ignored the return value of UserAnswerIsCorrect in your code.

You can do this

bool corr;
corr = UserAnswerIsCorrect( a, b, atimesb);
if(corr) { 
numCorrect++;
}

Although it just happened because you was ignoring the return value.

try this condition

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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