0

В настоящее время я изучаю функции на C++ и в настоящее время работаю над домашним заданием с функциями, являющимися главными.Получение странного значения

В настоящее время я пытаюсь сделать калькулятор оценки, при этом каждая операция процесса разбивается на собственную функцию.

Вот код:

#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; 
} 

Мой вопрос, который я считаю, заключается в функциях currentPoints и currentAverage, является то, что, когда я запускаю этот totalPts выходов, -5.09078e+61 и как прослеживания результата с функцией currentAverage, availableAverage выходы как -1.157e+62.

Я уверен, что проблема связана с тем, как я передаю значения из функции в функцию (что я сомневаюсь, что я делаю правильно).

Как я могу исправить эту проблему?

Заранее спасибо.

+0

'double quizPts, labPts, teamPts, homeworkAverage;' Все они не инициализируются, когда вы вызываете функцию 'currentPoints'. – PaulMcKenzie

+0

Первое, что вам нужно сделать, как понять проблему самостоятельно, так и сделать ее доступной для других, чтобы помочь вам, - сводить ее к соответствующему ядру. Я сомневаюсь, что все 127 строк способствуют этой проблеме. Например, вы можете безопасно удалить такие функции, как 'quizAverage()', которые не изменяют глобальное состояние и игнорируют возвращаемое значение. – Heinrich

+0

Вы передаете неинициализированное значение для функции currentPoints.You нужно назначить его как quizPts = quizAverage(); labPts = labAverage(); .... так далее и totalPts = currentPoints (quizPts, labPts, teamPts, homeworkAverage, exam1Pts, exam2Pts); – user1438832

ответ

0

Вы должны сохранить возвращаемое значение из currentPoints функции(), как это.

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

Причина в том, что вы указали «totalPts» как локальную переменную в currentPoints().

«Локальные переменные имеют только область видимости функции, она не определена для основной функции».

Сделайте это для всех других функций (quizAverage, labAverage, TeamProject, exam1, exam2, hwAverage, currentAverage)

Я надеюсь, что это решит проблему !!!

+0

Спасибо! Это и поступок Николаса Депрану сделал трюк! – Xankar

0

Проблема не в функциях, а в переменных.

Давайте quizPts к примеру:

В основной метод, вы объявляете эту переменную, но тогда вы ничего с этим не делать, прежде чем отправить его в currentPoints. Поэтому, когда вы это делаете, оно имеет неопределенное значение (неопределенный часто выглядит случайным в C).

Другая переменная quizPts, которую вы используете в quizAverage, имеет одно и то же имя, но не то же самое для компилятора.

Попробуйте ваш главный:

quizPts = quizAverage();

+0

Спасибо за разъяснение! – Xankar

0

Вы спросили

Как бы идти о фиксации этого вопроса?

И ответ «Использовать инструмент отладки с открытым окном« часы »в вашей любимой среде IDE».

Всегда бывает сложно найти ошибку, просто перечитав код, но в отладчике вы можете увидеть все значения ваших переменных в каждый момент времени. В частности, в этом примере вы поймете, что ваши переменные имеют значения мусора с самого начала (не инициализируются), и это значение никогда не изменяется.

Используя этот подход, вы можете найти причину самостоятельно во времени меньше, чем необходимо, чтобы написать этот вопрос. Надеюсь, это поможет вам сэкономить ваше время в будущем.

+0

Ничего себе, не знал этого. Спасибо, что сказал мне это. – Xankar

0

Проблема заключается в том, что вы используете переменные типа quizPts и labPts, не сохраняя в них никакого значения. В вашем случае вы должны сохранить возвращаемое значение функции в соответствующую переменную перед ее использованием. Например, выполните следующие действия: quizPts = quizAverage();

Смежные вопросы