更有效地使用确定用户输入获胜者的函数

时间:2016-11-03 04:21:57

标签: c++ function

所以在我的编程课实验室中,我被问到这个问题:“编写一个程序,提示用户输入两个篮球队的名称和分数。然后,它使用嵌套if显示获胜者(如果两个团队拥有相同的点数 - 每个场景一个屏幕截图 - 使用一个功能来确定可能的场景。“

我得到了答案,但我觉得它可能会被大大压缩,而且我放入一个函数的唯一原因是因为它是必需的。我想在如何使这个功能更有效和有用的未来代码方面提供一些帮助。任何提示将不胜感激! (以下代码)

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

string bballTeam1;
string bballTeam2;
int scoreCheck(int, int);


int main() {

int winner;
int score1 = 0;
int score2 = 0;

cout << "Enter a basketball team name: ";
getline(cin, bballTeam1); //had to make sure to account for spaces
cout << endl;
cout << "Enter a basketball team name: ";
getline(cin, bballTeam2); //had to make sure to account for spaces
cout << endl;

cout << "How many points do the " << bballTeam1 << " have? ";
cin >> score1; //get points
cout << endl;
cout << "How many points do the " << bballTeam2 << " have? ";
cin >> score2; //get points
cout << endl;

winner = scoreCheck(score1, score2); // go to function

if(winner == 1) { //if statements to determine correct output
    cout << "The " << bballTeam1 << " are winning!" << endl;
}
else if(winner == 2) {
    cout << "The " << bballTeam2 << " are winning!" << endl;
}
else {
    cout << "Looks like they are tied up!" << endl;
}

return 0;
}
int scoreCheck(int a, int b) { //a is score1, b is score2

int winner; //set value to int for output

if (a > b) {
    winner = 1; //1 is team 1
}
else if(a < b) {
    winner = 2; //2 is team 2
}
else if(a == b) {
    winner = 0; //0 is tie
}

return winner; //returns value of winner
}

1 个答案:

答案 0 :(得分:0)

当坐下来编写一个函数时,首先要考虑的事情之一就是函数的最佳界面:它将采用什么值,以及它将返回什么值。

这里要考虑的一些因素是函数的用途,可用的输入以及函数的使用方式。

在你的情况下,你创建了一个函数,它接受两个整数作为输入,对它们执行一些非常简单的逻辑,并返回另一个整数,该整数用特殊值编码以表示结果。虽然这是有效且有效的,但是在你使用它的用例中很难:在调用函数之后,你需要使用非常相似的逻辑来对结果起作用。

我更倾向于让函数返回一个表示分数检查结果的字符串,如下所示:

string scoreCheck(int score1, string team1,  int score2, string team2) {

    string result;

    if (score1 > score2) {
        result = "The "+team1+" are winning!";
    }
    else if(score1 < score2) {
        result = "The "+team2+" are winning!";
    }
    else {
        result = "Looks like they are tied up!";
    }

    return result;
}

然后,您可以简化主要功能,用以下内容替换所有if / then分支:

cout << scoreCheck(score1, bballTeam1, score2, bballTeam2) << endl; 

这一切都归结为如何使用函数 - 在这种情况下我们想要的函数是一个表示我们可以直接输出的游戏结果的字符串。该函数未在程序中的任何其他上下文中使用,因此我们应尽可能使其适合此用例。

另请注意,我将嵌套if的最后一部分更改为普通的&#39; else&#39; - 由于我们已经消除了其他案例,因此无需检查得分= =得分2。