«Используется неинициализированная локальная переменная» - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть вызов к 2 функциям, которые находят самый высокий и самый низкий балл соответственно. они возвращают «самую высокую оценку» и «самую низкую оценку», но я запутался, почему ошибка появляется при компиляции. Это лабораторное задание, и большая часть кода была написана заранее, и мне было поручено заполнить недостающий код. Ошибка возникает вокруг строк 55 и 63, а функции, на которые я ссылаюсь, находятся в конце кода.

Я новичок в использовании массивов, поэтому я предполагаю, что у меня может быть несколько для ошибочного кода внутри функций "findHighest" и "findLowest". Например, программа в «findHighest» будет предполагать, что первый массив, с которым она работает, имеет наивысшую оценку, и будет сравнивать оставшиеся массивы с ней, пока не найдет более высокий массив. Если это так, то он назначит этот массив «самыми точными».

float findAverage(const GradeType, int);
int findHighest(const GradeType, int);
int findLowest(const GradeType, int);

int main()
{
    GradeType  grades;
    int  numberOfGrades;
    int pos;

    float avgOfGrades;
    int highestGrade;
    int lowestGrade;

    // Read in the values into the array
    pos = 0;
    cout << "Please input a grade from 1 to 100, (or -99 to stop)" << endl;
    cin >> grades[pos];
    int i = 1;

    while (grades[pos] != -99)
    {
        // read in more grades
        pos = i;
        cout << "Please input a grade from 1 to 100, (or -99 to stop)" << endl;
        cin >> grades[pos];
    }

    numberOfGrades = pos;  // Fill blank with appropriate identifier
                           // call to the function to find average
    findAverage(grades, numberOfGrades);
    avgOfGrades = findAverage(grades, numberOfGrades);
    cout << endl << "The average of all the grades is " << avgOfGrades << endl;

    //  Fill in the call to the function that calculates highest grade
    findHighest(grades, highestGrade);
    highestGrade = findHighest(grades, highestGrade);
    cout << endl << "The highest grade is " << highestGrade << endl;

    // Fill in the call to the function that calculates lowest grade
    findLowest(grades, lowestGrade);
    // Fill in code to write the lowest to the screen
    lowestGrade = findLowest(grades, lowestGrade);

    cout << endl << "The lowest grade is " << lowestGrade << endl;

    return 0;
}

float findAverage(const GradeType  array, int size)
{
    float sum = 0;   // holds the sum of all the numbers

    for (int pos = 0; pos < size; pos++)
        sum = sum + array[pos];

    return (sum / size);  //returns the average
}

int   findHighest(const GradeType array, int size)
{
    // Fill in the code for this function
    float highestGrade = array[0];

    for (int i = 0; i < size; i++)
    {
        if (array[i] > highestGrade)
            highestGrade = array[i];
    }

    return highestGrade;
}

int   findLowest(const GradeType array, int size)
{
    // Fill in the code for this function
    float lowestGrade = array[0];

    for (int i = 1; i < size; i++)
    {
        if (array[i] < lowestGrade)
            lowestGrade = array[i];
    }

    return lowestGrade;
}

Программа не может вывести самую высокую и самую низкую оценку из-за ошибки.

1 Ответ

1 голос
/ 05 апреля 2019
findLowest(grades, lowestGrade);

Вы используете lowestGrade перед его инициализацией.

int lowestGrade; 

должно быть

int lowestGrade = 0;  // or to anything that has meaning for your app.

И, конечно же, в качестве лучшего C ++, объявите его перед тем, как вам нужноэто не вверху функции.

То же самое для других переменных.

Все это, конечно, если логика верна.Почему вы передаете самый низкий / самый высокий балл как параметр размера в функциях?

...