【c】バグのチェック

1927 ワード

前のブログの内容と照らし合わせなければならないかもしれません
 
        aver /= i;
    printf("%d
",aver);

平均数を求めるときにこのようなコードを入れました
またmain関数にこんな行が加わった
printf("%d
",i); find(i); scanf( "%d", &i );

次にfind関数の最初のforループにこのような行を加えます
        aver += kid[n].v;
        printf("%d
",aver);

 
サンプル入力のレビュー
サンプル入力
3
10 10 2 Jill
5 3 10 Will
5 5 10 Bill
4
2 4 10 Cam
4 3 7 Sam
8 11 1 Graham
6 2 7 Pam
-1
 

出力はこうです
200
350
600
Bill took clay from Will.
4
280
364
452
536
Graham took clay from Pam.
averの付与文を振り返ってみましょう
aver += kid[n].v;
寝槽!
血を吐いて冠を突いて起きよう......
何が起こっているのか分かりましたが、入力データを
サンプル入力
3
10 10 6 Jill
15 3 10 Will
15 5 10 Bill
4
2 4 10 Cam
4 3 7 Sam
8 11 1 Graham
6 2 7 Pam
-1

出力が
3
600
1050
1800
Bill took clay from Will.
4
680
764
852
936
Graham took clay from Pam.
averは宣言時に定義されていないが、mainがfind関数を2回目に呼び出すと、システムがaver変数に割り当てたメモリアドレスは依然として前のaver変数のアドレスであり、前のaver変数の値は200であるため、このaverの値は200であるため、280 364 452 536が出力される
前のaverの値が600の場合、次のaverは680 764 852 936になります.
over
バグ全体を解決するには1つの初期化しか必要ありません