如何使用函数区分名称之间的分数

时间:2015-04-12 18:53:40

标签: c++ function voting

我正在尝试使用函数制作才艺表演型投票程序。

我发现了大部分问题。程序会提示您输入一个名称,然后输入五个分数,如果您键入“完成”而不是名称,它将关闭。我正在使用大多数代码的函数来练习它们。

我的大问题是,可能存在无限数量的名称(用户输入的数量),我不知道如何将每个名称的所有5个分数加起来,我不知道如何区分它们。 5个分数将被平均,平均分数最高的人(3分,下降2分)将成为胜利者。

旁注:我需要降低每个人的最高分和最低分,我相信我可以弄明白但是一个具有此功能的例子对于刚接触他们的人会有所帮助。

我对此进行了很多研究,但我找不到任何与我相似的例子(可能有无数的参赛者)。

到目前为止,这是我的代码,底部的功能是我搞乱了它们的功能,看看我是否能从名称中得到任何分数。

    #include <iostream>
#include <string>
using namespace std;

void validCheck();
void calcAvgScore();
void findHigh();
void findLow();


int main(){
    int judge = 1;
    double score = 0;
    string name;


    while (name != "done" || name != "Done"){
        cout << "Enter Contestant Name, if no more, type 'done': ";
        cin >> name;
        if (name == "done" || name == "Done"){ break; }
        for (judge = 1; judge < 6; judge++){
            cout << "Enter score " << judge << " ";
            validCheck();
        }
    }


    system("pause");
    return 0;


}



void validCheck(){
    double score;
    cin >> score;
    if (score < 1 || score > 10){
        cout << "Please Enter a score between 1 and 10: ";
        cin >> score;
    }
}

void calcAvgCheck(){
    double score = 0, value = 0;
    static int average;

    score += value
}

1 个答案:

答案 0 :(得分:0)

声明一个字符串“winner”,双重“win_avg”,在while循环之外加上“avg”。

让你的validCheck()返回作为输入给出的double值(命名分数)。

在for循环之前声明一个double数组(double [5]得分)。将validCheck()返回的每个值存储到数组中。

调用std :: sort(std :: begin(scores),std :: end(scores))对您的分数进行升序排序。找出平均值(忽略最大值和最小值),并保持最大平均值以及具有最大平均值的人的姓名。

#include <algorithm>    // std::sort
...
double validCheck();
...

int main(){
    string name;
    string winner;
    double win_avg;
    double avg;

    while (name != "done" || name != "Done"){
        cout << "Enter Contestant Name, if no more, type 'done': ";
        cin >> name;
        double scores[5];
        if (name == "done" || name == "Done"){ break; }
        for (int judge = 0; judge < 5; ++judge){
            cout << "Enter score " << judge << " ";
            scores[judge] = validCheck();
        }
        std::sort(std::begin(scores), std::end(scores));
        for(int score = 1; score < 4; ++score) 
            avg += scores[score];
        avg /= 3;
        if(avg > win_avg) {
            winner = name;
            win_avg = avg;
        }
        avg = 0;
    }
    std::cout << "Winner is: " << winner << "\n";
}


double validCheck(){
    double score;
    cin >> score;
    if (score < 1 || score > 10){
        cout << "Please Enter a score between 1 and 10: ";
        cin >> score;
    }
    return score;
}

如果要在函数中找到平均值并返回值,可以执行此操作

double calcAvgCheck(const double& scores[5]) {
    double avg = 0.0;
    for(int score = 1; score < 4; ++score) 
        avg += scores[score];
    avg /= 3;
    return avg;
}