C ++程序无法显示正确的输出

时间:2019-12-11 01:22:46

标签: c++ arrays function loops

嗨,我还是这个编码的新手。这是我最后的编程任务,遇到了一些麻烦。这是我的程序分配:

  

程序需要定义一个整数数组来存储10个考试分数,并要求用户将这10个分数输入该数组(输入验证)。然后将数组传递给一个函数并返回该数组的最小值的索引,然后将该数组传递给另一个函数并返回该数组的最大值的索引,然后将该数组传递给第三个函数以计算平均值( )中得分最低的那些考试分数,然后返回平均分数。这些功能中没有输入和输出。最后,在主函数中输出min和max的索引,min和max的值以及平均值。

每当我运行该程序时,它根本不会显示平均值(保持为0.0),也不会显示正确的最高和最低测试分数。这是代码

#include <iostream>
#include <iomanip>

using namespace std;

int examScores(int,int, int);
int lowestExamScore(int[]);
int highestExamScore(int[]);
double average(int, int);

int main()
{
    int scoreArray[10];
    int testScore = 0,
        lowestScore = 0,
        highestScore = 0,
        total = 0;
    double avg = 0.0;

    for(int i = 1; i < 11; i++)
    {
        testScore = examScores(testScore, i, total);
        scoreArray[i-1] = testScore;
    }

    lowestScore = lowestExamScore(scoreArray);
    highestScore = highestExamScore(scoreArray);
    average(lowestScore, total);

    cout<<"The lowest score dropped was: "<<lowestScore
        <<" whilst the highest score was: "<<highestScore<<endl;
    cout<<setprecision(2)<<fixed<<showpoint<<endl;
    cout<<"Average of the exams is: "<<avg<<endl;

    return 0;
}

int examScores(int testScore, int i, int total)
{
    cout<<"Please enter the test score for exam "<<i<<endl;
    cin>>testScore;

    while(testScore == 0 || testScore > 100)
    {
        cout<<"Invalid test score. Please enter a valid test score."<<endl;
        cin>>testScore;
    }
    total += testScore;
    return testScore;
}

int lowestExamScore(int scoreArray[10])
{
    int smallest = scoreArray[0];
    for(int i = 1; i < 11; i++)
    {
        if(scoreArray[i] < smallest)
            smallest = scoreArray[i];

    return smallest;
    }

}
int highestExamScore(int scoreArray[10])
{
    int highest = scoreArray[0];
    for(int i = 1; i < 11; i++)
    {
        if(scoreArray[i] > highest)
            highest = scoreArray[i];

    return highest;
    }
}
double average(int lowestScore, int total)
{
    double avg;
    int sumOfExams;

    sumOfExams = total - lowestScore;
    avg = sumOfExams / 9.0;
    return avg;
}

2 个答案:

答案 0 :(得分:2)

lowestExamScore()highestExamScore()在其for循环中具有return语句。同样,这些函数中的循环将上升到索引10,而不是上升到9。尝试访问数组的元素10将导致未定义的行为。重写这些函数,如下所示:

int highestExamScore(int scoreArray[])
{
    int highestScore = scoreArray[0];
    // Starts at 2nd element in scoreArray and increments to last
    for(int i = 1; i < 10; i++)
    {
        if (highestScore < scoreArray[i])
        {
            highestScore = scoreArray[i];
        }
    }
    return highestScore;
}

对于其他功能也是如此。

关于意外的平均收益0.0,我注意到您的int total从不会在您的主函数中增加。如果您仅添加以下行:

total += testScore;

在您的主循环中,那应该可以解决它。

对于一般的调试,这里有一些提示:

  1. 您可以在某些代码行中将打印语句用于测试值。例如,在您的平均功能中,打印传入的总和最小分数值可以帮助您确定错误的位置。

  2. 如果使用的是IDE(如Visual Studio,KDevelop等),则可以在认为代码可能获得错误值的行上添加断点。然后,内置调试器将为您显示范围内每个变量的值。

  3. 在此处发布问题之前,需要进行一些调试工作。有关问题所在的信息越多,您将获得更好的答案。此外,它可能会排除需要职位的情况。 :)

答案 1 :(得分:0)

最低y最高不是notvcalculatong,因为您的循环在第一个循环退出。将回车移到外面。您在平均函数中使用avg全局变量,而使用局部变量avg而不是返回它。但是,当您调用平均函数时,您不会将结果赋给任何变量。因此,当您打印avg的值时,您正在打印全局变量。或从平均值函数中删除局部变量或分配全局avg = average。

我的英语不好,但我希望你能理解我。