简体   繁体   中英

how do I get this function to run

Im having trouble with calculating correct answers and determining weather a function returns true or false

char correctAnswers[] = {'B','D', 'A', 'A', 'C', 'A', 'B', 'A', 'C', 'D'};
char studentAnswers[10] = {}; 

I have my student answers and the correct answers stored like this ^^^

bool grade(char correctAnswers[], char studentAnswers[]){
    int j = 0;
    int b = 0;
    for(int x=0; x<10; x++){
                if(correctAnswers[b]==studentAnswers[j]){
                    b++;
                    j++;
                    ++ansCorrect;
                    
                }
    }
                

    
    if(ansCorrect >= 8){//8 out of 10 correct
        return true;}
    else;
        return false;
}

then with this piece of code I am trying to check each answer the user inputs to see if it matches the given answer on the corresponding index (1,1)(2,2)(3,3) etc.

if (grade()==true){
    cout << "Congratulations!\nYou have passed exam.\n";
}
    if (grade()==false){
    cout << "Sorry, you have not passed the exam!\n";}

This piece of code is 100 % wrong, but I am trying to use it as a reference as to what I need, I need to take the grade function and check if it returned true or false

Your loop logic is pretty wild. I remember seeing your question yesterday, and had pointed out many issues with it. Looks like you tried to take some of that on board and fix your loop but it's still really broken.

The issue is you only ever increment b and j if you get a correct answer. So, ask yourself: what if the values don't match? Well, you never increment your indices and so every subsequent iteration of the loop is testing the same values.

The way to test each element against the corresponding one is to use the loop variable x as an index.

for(int x = 0; x < 10; x++) {
    if (correctAnswers[x] == studentAnswers[x]) {
        ++ansCorrect;
    }
}   

With a few extra tidy-ups, your function can become:

bool grade(char correctAnswers[], char studentAnswers[])
{
    int ansCorrect = 0;
    for(int x = 0; x < 10; x++) {
        ansCorrect += (correctAnswers[x] == studentAnswers[x]);
    }
    return ansCorrect >= 8;
}

And you should change how you call it. Right now, you're calling it twice. Just use else . And try to avoid comparing boolean values to true . Either omit the comparison completely, or test that it's not false . The reason is that not all "true-like" values are equal to true . In C++, any non-zero value can be a logical truth, whereas zero is always false.

So, while this may seem to be splitting hairs for a type like bool which does have guarantees, getting in the habit of avoiding "equals true" tests will help you not create bugs in future when you are working on more complex programs.

if (grade(correctAnswers, studentAnswers)) {
    cout << "Congratulations!\nYou have passed exam.\n";
} else {
    cout << "Sorry, you have not passed the exam!\n";
}

Note that the error you mention in the comments suggests that wherever you are calling grade from (probably in main function?) might not have seen a definition of that function (code is compiled from the top down).

In that case, you can either move the entire function above main or you can pre-declare the function (otherwise known as a "function prototype") by adding this line somewhere above your main . Then when the compiler sees you try to call grade it will know what that function looks like, even though it's not yet defined:

bool grade(char correctAnswers[], char studentAnswers[]);

maybe the ";"after "else" is a bug. and you can try this:

#include <iostream>

using namespace std;

bool grade(char correctAnswers[], char studentAnswers[])
{
    int ansCorrect = 0;
    for (int i = 0; i < 10; i++)
    {
        if (correctAnswers[i] == studentAnswers[i])
        {
            ansCorrect++;
        }
    }
    if (ansCorrect >= 8)
    { // 8 out of 10 correct
        return true;
    }
    else
        return false;
}

int main()
{
    char correctAnswers[] = {'B', 'D', 'A', 'A', 'C', 'A', 'B', 'A', 'C', 'D'};
    char studentAnswers[10] = {};
    for (int i = 0; i < 10; i++)
    {
        cin >> studentAnswers[i];
        cin.ignore();
    }
    if (grade(correctAnswers, studentAnswers) == true)
    {
        cout << "Congratulations!\nYou have passed exam.\n";
    }
    else if (grade(correctAnswers, studentAnswers) == false)
    {
        cout << "Sorry, you have not passed the exam!\n";
    }
}

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