for循环中的变量错误

时间:2014-04-05 19:48:00

标签: c++ loops for-loop

我知道这不是一个好头衔,但我不确定如何说出来。无论如何,简而言之,我试图计算得分的数量,得分总数以及得分的平均值和等级。我正在使用...循环来完成此任务。所以... 我的函数原型:

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不在该范围内的值时,该功能应该按原样运行,但是摘要会告诉我分数的数量是第一个错误的值,结果弄平了我的平均值/等级。

2 个答案:

答案 0 :(得分:0)

通过value将num传递给validateNumber函数会发生什么。 validateNumber函数中的本地num复制全局num的值并相应地进行处理。但是,全局num变量保持原样。为了更改num本身,您必须通过引用传递它。将函数定义的参数更改为:int validateNumber(int &num) { ... }

答案 1 :(得分:0)

在你的函数中,你通过值而不是通过引用传递,所以在函数int validateNumber(int);中完成的更改仅在该函数的范围内,在num的值之外是相同的这是第一次。你应该通过参考发送价值。这样:

int validateNumber(int &);