C ++计算成绩函数

时间:2015-02-27 20:29:02

标签: c++

我遇到语义错误。我一遍又一遍地改变了我的代码,无法弄清楚是什么导致我的代码不能正确输出字母等级。有人可以帮忙吗?

#include <iostream>
#include <conio.h>

using namespace std;

int getScore(int& score);
int calculateGrade(int cScore);

int main()
{
    int score;
    int cScore;

    cout << "Based on the course score, \n this program computes the course";
    cout << " grade." << endl;

    getScore(score);

    calculateGrade(cScore);

    cout << "Your grade for the course is: " << static_cast<char>(cScore);
    cout << endl;

    _getch();
    return 0;
}

int getScore(int& score)
{
    cout << "Enter the course score: ";
    cin >> score;
    cout << "Course score is: " << score << endl;
    return score;
}

int calculateGrade(int cScore)
{

    if (cScore >= 90)
        cScore = 65;
    if ((cScore >= 80) && (cScore < 90))
        cScore = 66;
    if ((cScore >= 70) && (cScore < 80))
        cScore = 67;
    if ((cScore >= 60) && (cScore < 70))
        cScore = 68;
    if (cScore < 60)
        cScore = 70;

    return cScore;

}

我使用static_cast错了吗?我翻阅了整本书,找不到任何答案。我的参数有错误吗?我不确定我是否完全理解参数如何工作。我已经阅读了很多内容,但我觉得好像我有时还没有正确使用它们。请帮我找一下我的calculateGrade函数的问题。

4 个答案:

答案 0 :(得分:2)

您的calculateGrade函数可以返回一个字符,然后您可以将其转换为:

if (cScore >= 90) return 'A';

依旧......

然后您将使用:

std::cout << "The grade is: " << calculateGrade(score) << std::endl;

或者

char grade = calculateGrade(score);

std::cout << "The grade is: " << grade << std::endl;

也没有真正的理由从getScore函数返回一个int,因为你通过引用传递得分并以这种方式输入。

int getScore(int& score)
{
    cout << "Enter the course score: ";
    cin >> score;
    cout << "Course score is: " << score << endl;
    return score;
}

可以更改为

void getScore(int& score)
{
    cout << "Enter the course score: ";
    cin >> score;
    cout << "Course score is: " << score << endl;
}

或者:

int getScore()
{
    int score;
    cout << "Enter the course score: ";
    cin >> score;
    cout << "Course score is: " << score << endl;
    return score;
}

然后在您的主程序中,您将调用:

int score = getScore();

修改

如果赋值需要使用强制转换,则该函数可以保持不变,但您必须通过以下两种方式之一从main调用它:

1)

std::cout << "The course grade is: " << static_cast<char>(calculateGrade(score)) << std::endl;

2)

int calculated_score = calculateGrade(score);

然后将其投放到std::cout

答案 1 :(得分:0)

您正在混合得分和cScore导致问题。 这是经过编辑的工作代码。我只编辑了代码以使其正常工作,我没有对代码进行进一步的更改以使其良好。

您的代码中有多个位置需要更改。

#include <iostream>
#include <conio.h>

using namespace std;

int getScore(int& score);
int calculateGrade(int score, int& cScore); //added 1 more argument

int main()
{
    int score;
    int cScore;

    cout << "Based on the course score, \n this program computes the course";
    cout << " grade." << endl;

    getScore(score);

    calculateGrade(score, cScore);

    cout << "Your grade for the course is: " << (cScore);
    cout << endl;

    _getch();
    return 0;
}

int getScore(int& score)
{
    cout << "Enter the course score: ";
    cin >> score;
    cout << "Course score is: " << score << endl;
    return score;
}

int calculateGrade(int score, int& cScore) //Should compare score & return cScore
{
    if (score >= 90)
        cScore = 65;
    if ((score >= 80) && (score < 90))
        cScore = 66;
    if ((score >= 70) && (score < 80))
        cScore = 67;
    if ((score >= 60) && (score < 70))
        cScore = 68;
    if (score < 60)
        cScore = 70;

    return cScore;

}

因为您似乎不希望从函数返回值,而只想通过引用传递cScore。您还需要将cScore作为calculateGrade()函数的参数之一。

答案 2 :(得分:0)

更换

calculateGrade(cScore);

cScore = calculateGrade( score );

解决了这个问题。

首先,使用cScore而不进行初始化。其次,您永远不会将calculateGrade的返回值存储在cScore

答案 3 :(得分:0)

你这样做:

int getScore(int& score)
{
    cout << "Enter the course score: ";
    cin >> score;
    cout << "Course score is: " << score << endl;
    return score;
}
但是我敢打赌你不知道自己在做什么。这return statement实际上没有必要;您是使用符号score将参考传递的变量&保存在当前得分中,因此它将保存在score中定义的变量main中。现在,你这样做:

int calculateGrade(int cScore)
{
if (cScore >= 90)
    cScore = 65;
if ((cScore >= 80) && (cScore < 90))
    cScore = 66;
if ((cScore >= 70) && (cScore < 80))
    cScore = 67;
if ((cScore >= 60) && (cScore < 70))
    cScore = 68;
if (cScore < 60)
    cScore = 70;

return cScore;
}

但是现在你没有通过引用传递参数,所以return语句是不够的,因为你没有将结果存储到任何变量!此外,您正在对要更改的变量进行多次检查。想一想。

以下两种方法可以解决问题。

int getScore();
int calculateGrade(int);

int main()
{
    int score;
    int cScore;

    cout << "Based on the course score, \n this program computes the course";
    cout << " grade." << endl;

    score = getScore();
    cScore = calculateGrade(score);


    cout << "Your grade for the course is: " << static_cast<char>(cScore);
    cout << endl;

    _getch();
    return 0;
}

int getScore()
{
    int score;
    cout << "Enter the course score: ";
    cin >> score;
    cout << "Course score is: " << score << endl;
    return score;
}

int calculateGrade(int score)
{
    int cScore;
    //only one statement is true here, let's state it more nicely.
    if (cScore >= 90)
        cScore = 65;
    else if ((cScore >= 80) && (cScore < 90))
        cScore = 66;
    else if ((cScore >= 70) && (cScore < 80))
        cScore = 67;
    else if ((cScore >= 60) && (cScore < 70))
        cScore = 68;
    else
        cScore = 70;

    return cScore;

}

另一种方法是通过引用传递变量,我不建议这个简单的例子。

请注意这两行:

    score = getScore();
    cScore = calculateGrade(score);

这两个函数的return语句的结果现在存储在各自的变量中。