我被指派做一个得分为6分的程序,得分最低,然后取得最高5分的平均分。我不明白为什么我不能在我的calcAverage函数中正确使用最低变量。
#include <iostream>
#include <iomanip>
using namespace std;
void getScore(int &Score);
void calcAverage(int, int, int, int, int, int, int &lowest);
int findLowest(int s1, int s2, int s3, int s4, int s5, int s6, int &lowest);
int main()
{
int s1, s2, s3, s4, s5, s6, lowest;
// Call on getScore function to iterate through each of the six scores
getScore(s1);
getScore(s2);
getScore(s3);
getScore(s4);
getScore(s5);
getScore(s6);
// Call the calcAverage to display average of five highest scores
calcAverage(s1, s2, s3, s4, s5, s6, lowest);
system("pause");
return 0;
}
void getScore(int &Score)
{
cout << "Please enter a test score (Value betweent 1 and 100): ";
cin >> Score;
// Validate the score input
while (Score < 1 || Score > 100)
{
cout << "Invalid input, Please enter a test score value from 0 to 100! ";
cin >> Score;
}
}
int findLowest(int s1, int s2, int s3, int s4, int s5, int s6, int lowest)
{
lowest = s1;
if (s2 < lowest)
lowest = s2;
else if (s3 < lowest)
lowest = s3;
else if (s4 < lowest)
lowest = s4;
else if (s5 < lowest)
lowest = s5;
else if (s6 < lowest)
lowest = s6;
cout << "The lowest test score is: " << lowest << endl;
return lowest;
}
void calcAverage(int s1, int s2, int s3, int s4, int s5, int s6, int &lowest)
{
int findLowest(int, int, int, int, int, int, int);
double avg;
findLowest(s1, s2, s3, s4, s5, s6, lowest);
avg = ((s1 + s2 + s3 + s4 + s5 + s6) - lowest) / 5.0;
cout << fixed << showpoint << setprecision(2);
cout << "The average of the five highest scores is: " << avg << endl;
}
答案 0 :(得分:2)
您写道:
int findLowest(int s1, int s2, int s3, int s4, int s5, int s6, int &lowest);
...
int findLowest(int s1, int s2, int s3, int s4, int s5, int s6, int lowest)
{
...
void calcAverage(int s1, int s2, int s3, int s4, int s5, int s6, int &lowest)
{
int findLowest(int, int, int, int, int, int, int);
注意缺少&amp;在定义中。那应该与宣言相符。第二个声明(匹配错误的定义)不应该存在。我假设你添加了第二个声明来摆脱你误解的编译时错误。
编辑:其他人指出了另一个错误(当你想要else if
时使用if
),一旦你修复了我描述的错误就会显示错误。
答案 1 :(得分:1)
JSF的答案指出了一个需要解决的问题。
风格说明:您经常声明findLowest。声明一次,定义一次并随意使用它。但假设数据(10,7,5 ......)
lowest = s1;
if (s2 < lowest)
lowest = s2;
else if (s3 < lowest)
第一行中最低的是10。
然后s2&lt; 10最低= 7。
现在s3是&lt; 7,但它不会被执行,因为它发生在else分支和s2&lt;最低的是真的。
最后你的错误值。
另一种风格的注释:你有一个函数,它接受6个输入参数并从中计算一个值。这是一个不传递引用但仅返回该值的用例,无论如何都是这样做。
int findLowest(int s1, int s2, int s3, int s4, int s5, int s6);
并将其命名为
lowest=findLowest(s1,s2,s3,s4,s5,s6);
将清除你的大脑引用,else
语句和多个函数声明。