配列の疑問。
もうすぐC言語のテストがあるので適当に自分で問題を作って
プログラムを作る練習をしていたのですが配列の所でちょっと疑問に思いました。
問題
ひとつずつ数字を入力していき、それまでの数字の合計と平均を求めるプログラム。
0を入力するとプログラム終了(配列、ポインタ、関数を用いること)
#include <stdio.h>
int wa(int *a,int b);
main()
{
int a[10],ans,i=0,c;
double ave=0,j;
while(1)
{
scanf("%d",&a[i]);
c=a[i];
i++;
if(c==0){
exit(1);
}
ans=wa(&a[0],i);
printf("合計%d\n",ans);
j=i;
ans=wa(&a[0],i);
ave=ans/j;
printf("平均%lf\n",ave);
printf("計算回数%d回\n",i);
}
}
int wa(int *a,int b)
{
int ans=0,i;
for(i=0;i<b;i++){
ans+=*(a+i);
}
return ans;
}
このようなプログラムで一応自分の期待通りには動いてくれたのですが、
こういう「0」を入力しない限り終わらないプログラムのときに配列を利用すると
どれぐらい領域を取っておくかがわからないんですよ。
今回はa[10]としてますが、結局10しか確保してないから10回しか入力できないかな?
っと思って実行してみますが普通に10回以上でもエラーがでることもなく実行できるんですよね。
これはなぜでしょうか?
私の配列の考え方がまちがっているのでしょうか?