関数で配列を渡そうとしています。合計は 0 として返されます
/
void CalcAvg(int tests[], int numTests, float& avg)
{
int sum=0;
for (int i = 0; i < numTests; i++)
{
sum = sum + tests[i];
}
avg = (float)sum/numTests;
}
void CalcAvg(int tests[], int numTests, float& avg)
この関数の合計はローカルで宣言されます。平均のように、メインからの合計を参照として取得するように関数を変更する必要があります。
void CalcAvg(int tests[], int numTests, float& avg, int& sum)
または、以下に示すように、CalcAvg関数を変更して合計を返します。
int CalcAvg(int tests[], int numTests, float& avg)
{
int sum=0;
for (int i = 0; i < numTests; i++)
{
sum = sum + tests[i];
}
avg = (float)sum/numTests;
return sum;
}
次に、メインセットの合計はCalcAvg
int main(){
...
sum = CalcAvg (tests, 6, avg);
sum
合計として計算した値を変数に割り当てる必要があります(合計を返す ように関数をCalcAvg
変更しました)CalcAvg
#include <iostream>
using namespace std;
//prototype (fixed to return the sum)
int CalcAvg(int tests[], int numTests, float& avg);
int main ()
{
int tests[6]; //array declaration
float avg;
int sum=0;
//input test scores
cout<<"Enter"<<6<<"test scores:"<<endl;
for (int i=0; i<6; i++)
{
cout<<"enter Test"<<i+1<<":";
cin>>tests[i];
}
//2.print first test score
cout<<tests[0]<<endl;
//3.print the last test score
cout<<tests[5]<<endl;
//4.print all test scores
for(int i=0; i<6; i++)
{
cout<<tests[i]<<endl;
}
//7. Calculate Sum & Avg using function
sum = CalcAvg (tests, 6, avg);
cout<<"Your sum is"<<sum<<" and your average is "<<avg<<endl;
return 0;
}
int CalcAvg(int tests[], int numTests, float& avg)
{
int sum=0;
for (int i = 0; i < numTests; i++)
{
sum = sum + tests[i];
}
avg = (float)sum/numTests;
return sum;
}
これは「スコープ」の問題のように見えます
sum
inCalcAvgはinmainとは別であることに注意してくださいsum
。
cout<<"Enter"<<6<<"test scores:"<<endl;
まず、 insted を使用する理由を尋ねなければなりませんcout<<"Enter 6 test scores:"<<endl;
関数内で sum を宣言しました。ic c++ 関数内に変数を作成し、関数の最後で破棄します。sum
メイン関数内で宣言したものが CalcAvg 関数によって変更されたと思いますか。sum
これを行うには、main() で宣言した値を変更したい場合は、関数内でポインターを再実行する必要があります。
または、return ステートメントを使用して、CalcAvg 関数内の合計を返します。
この例を参照して、ポインターを使用して関数から値を変更する方法に注意してください。
main(){
int x=5;
change(&x);
cout<<x;
}
void change(int *p){
*p=10;
}