我遇到语义错误。我一遍又一遍地改变了我的代码,无法弄清楚是什么导致我的代码不能正确输出字母等级。有人可以帮忙吗?
#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函数的问题。
答案 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
语句的结果现在存储在各自的变量中。