Search code examples
c++functionparameter-passingpass-by-referencepass-by-value

Getting strange value


I'm currently learning about functions in C++ and am currently working on a homework assignment with functions being the main thing.

Currently, I'm trying to make a grade calculator with every operation of the process being split into a function of its own.

Here's the code:

#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>

using namespace std;

void getHWGrades(int homeworks[], int size)
{
    cout << "\nEnter the grades, out of 100 points, for the 9 homeworks you completed." << endl;
    cout << "Note that Homework 10 is given to you for free, but is the same grade \nas homework 9.\n" << endl;

    for (int i = 0; i < 9; i++)
    {
        cout << "Homework " << i + 1 << ": ";
        cin >> homeworks[i];

        while (homeworks[i] > 100 || homeworks[i] < 0)
        {
            cout << "Invalid grade, input homework grade again: ";
            cin >> homeworks[i];
        }
    }
    homeworks[9] = homeworks[8];
    cout << "Homework 10: " << homeworks[9];
}

double quizAverage()
{
    double quizPts;

    cout << "Input your in class quiz average: ";
    cin >> quizPts;
    return quizPts;
}

double labAverage()
{
    double labPts;

    cout << "Input your lab average: ";
    cin >> labPts;
    return labPts;
}

double teamProject()
{
    double teamPts;

    cout << "Input your team project grade: ";
    cin >> teamPts;
    return teamPts;
}

int exam1()
{
    int exam1Pts;

    cout << "Input your exam1 grade: ";
    cin >> exam1Pts;
    return exam1Pts;
}

int exam2()
{
    int exam2Pts;

    cout << "Input your exam2 grade: ";
    cin >> exam2Pts;
    return exam2Pts;
}

double hwAverage(int homeworks[], int size)
{
    double total = 0;
    double homeworkAverage = 0;

    for (int i = 0; i < size; i++)
    {
        total = total + homeworks[i];
    }

    homeworkAverage = (total*1.0) / 10;
    return homeworkAverage;
}


double currentPoints(double& quizPts, double& labPts, double& teamPts, double& homeworkAverage, int& exam1Pts, int& exam2Pts)
{
    double totalPts = ((quizPts / 100.0) * 10) + ((labPts / 100.0) * 10) + ((teamPts / 100.0) * 15) + ((homeworkAverage / 100.0) * 20) + ((exam1Pts / 100.0) * 10) + ((exam2Pts / 100.0) * 15);
    cout << "\nYour current points (out of the 80 total available), stand at: " << totalPts;
    return totalPts;
}

double currentAverage(double& totalPts)
{
    double availableAverage = totalPts*(100.0 / 80);
    cout << "\nYour current average is: " << availableAverage;

    return availableAverage;
}

int main()
{    
    // keep the console from closing in visual studio
    char charer;

    double totalPts;

    double quizPts, labPts, teamPts, homeworkAverage;
    int exam1Pts, exam2Pts;

    const int ARRAY_SIZE = 10;
    int hwArray[ARRAY_SIZE];
    getHWGrades(hwArray, ARRAY_SIZE);

    quizAverage();
    labAverage();
    teamProject();
    exam1();
    exam2();

    currentPoints(quizPts, labPts, teamPts, homeworkAverage, exam1Pts, exam2Pts);
    currentAverage(totalPts);

    cin >> charer;
}

My issue, which I believe lies in the functions currentPoints and currentAverage, is that when I run this totalPts outputs as -5.09078e+61 and as a follow up result with the currentAverage function, availableAverage outputs as -1.157e+62.

I'm sure that the issue has to do with how I'm passing the values from function to function (which I doubt I'm doing correctly).

How would I go about fixing this issue?

Thank you in advance.


Solution

  • You need to store the return value from currentPoints() function, like this.

    totalPts = currentPoints(quizPts, labPts, teamPts, homeworkAverage, exam1Pts, exam2Pts); currentAverage(totalPts);

    Reason is, you declared "totalPts" as local variable in currentPoints().

    "Local variables has function scope only, it is undefined to main function".

    Do this for all other functions(quizAverage,labAverage,teamProject,exam1,exam2, hwAverage,currentAverage)

    I hope, this will solve the issue !!!