我知道这不是一个好头衔,但我不确定如何说出来。无论如何,简而言之,我试图计算得分的数量,得分总数以及得分的平均值和等级。我正在使用...循环来完成此任务。所以... 我的函数原型:
int validateNumber(int);
void summary(int,int,float,char);
char getGrade(float);
float getAvg(int,int);
可能只有validateNumber(int)与此相关,但以防万一。
主()
int num, total, scores;
cout << over4 << "How many scores do you want to average? " << endl;
cout << over4 << "Enter a value from 1 to 4: ";
cin >> num;
和电话(?):
total = validateNumber(num);
summary(num,total,average,grade);
然后是定义:
int validateNumber(int num)
{
int total = 0, score;
while (num < 1 || num > 4)
{
cout << over3 << num << " is not between 1 and 4! Try again: ";
cin >> num;
}
system("CLS");
for (int i = 1; i <= num; i++)
{
cout << over3 << "Enter score " << i << ": " << endl;
cout << over3 << "Enter a value from 0 to 100: ";
cin >> score;
while (score < 0 || score > 100)
{
cout << over3 << score << " is not between 0 and 100! Renter the score: "
<< i << ": ";
cin >> score;
}
total += score;
}
return total;
}
和
void summary(int num,int total,float average,char grade)
{
cout << over4 << "Number of scores : " << num << endl;
cout << over4 << "Scores total : " << total << endl;
cout << over4 << "Average : " << average << "%" << endl;
cout << over4 << "Grade : " << grade << endl;
cout << down11;
}
当用户输入介于1和4之间的num值时,没有问题,程序可以正常工作。但是,当用户输入num不在该范围内的值时,该功能应该按原样运行,但是摘要会告诉我分数的数量是第一个错误的值,结果弄平了我的平均值/等级。
答案 0 :(得分:0)
通过value将num传递给validateNumber函数会发生什么。 validateNumber函数中的本地num复制全局num的值并相应地进行处理。但是,全局num变量保持原样。为了更改num本身,您必须通过引用传递它。将函数定义的参数更改为:int validateNumber(int &num) { ... }
答案 1 :(得分:0)
在你的函数中,你通过值而不是通过引用传递,所以在函数int validateNumber(int);
中完成的更改仅在该函数的范围内,在num的值之外是相同的这是第一次。你应该通过参考发送价值。这样:
int validateNumber(int &);