MegaNerd5
MegaNerd5

Reputation: 19

My program for calculating the final grade doesn't calculate it and I can't tell why

I've been trying to write a C++ program that calculates your end of year grade (an exercise given by the Google for Education C++ course). The program works, except for the fact that it doesn't calculate your final grade, instead, it just outputs "0". I have searched the code and can't seem to find the problem.

#include <iostream>
using namespace std;

int check(int a) {
    if (!(cin >> a)) {
        cout << "Come on, that isn't a score" << endl;
        return 0;
    }
}

int assignments() {
    int assignment1 = 0;
    int assignment2 = 0;
    int assignment3 = 0;
    int assignment4 = 0;

    cout << "Enter the score for the first assignment. ";
    check(assignment1);
    cout << "Enter the score for the second assignment. ";
    check(assignment2);
    cout << "Enter the score for the third assignment. ";
    check(assignment3);
    cout << "Enter the score for the fourth assignment. ";
    check(assignment4);
    return ((assignment1 + assignment2 + assignment3 + assignment4) / 4 * 0.4);

}

int mid() {
    int midterm = 0;
    cout << "Enter the score for the midterm. ";
    check(midterm);
    return (midterm * 0.15);
}

int finalex() {
    int finals = 0;
    cout << "Enter the score for the final. ";
    check(finals);
    return (finals * 0.35);
}

int participation() {
    int parti = 0;
    cout << "Enter the class participation grade. ";
    check(parti);
    return (parti * 0.1);
}

int main() {
    int assign = assignments();
    int midt = mid();
    int fingra = finalex();
    int partigra = participation();
    cout << "The final grade is: " << assign + midt + fingra + partigra << endl;
}

(The reason I have a different program for every grade type is because the course states that you should make as many functions as possible)

Upvotes: 2

Views: 905

Answers (2)

NP Rooski  Z
NP Rooski Z

Reputation: 3657

Your cin >> a statements updates value of a local variable which is gone as soon as check() returns. You want to update value of variables that are actually used for calculating grades. Just change the function check() to pass by reference check(int &a) or pass a pointer check(int *a)

Upvotes: 0

Hassaan Salik
Hassaan Salik

Reputation: 413

Either you should pass value to check() as reference or make check to return input value.

Change

int check(int a)

to

int check(int& a)

Second method

Modify check to

int check(int a) {
    if (!(cin >> a)) {
        cout << "Come on, that isn't a score" << endl;
        return a;
    }
}

And use return value to assign input to variables. Like

int midterm = 0;
    cout << "Enter the score for the midterm. ";
    midterm=check(midterm);

Upvotes: 1

Related Questions