11.2 デバッグライトによるデバッグ

  2.プログラム例1:デバッグ(1)
 それでは、先ほどのプログラムの要所にprintf文を挿入し、 valueの値を表示することによって、バグを見つけてみましょう。 printf文を挿入したプログラムを次に示します。

#include <stdio.h>

int main(void){
      int value;         /* キーボードから入力された数値 */

      printf("Enter number : ");
      scanf("%d", value);

      printf("value (before if) = %d\n", value);         /* デバッグ用 */

      if(value = 10){        /* 数値が10であるか判定 */
        printf("value (in if) = %d\n", value);           /* デバッグ用 */
        printf("Input number is 10.\n");
      }
      else {
        printf("value (in else) = %d\n", value);       /* デバッグ用 */
        printf("Input number is not 10.\n");
      }
}
 valueの値とプログラムの進行状況を調べるために、 3箇所にprintf文を挿入してみました(/* デバッグ用 */のついた行)。

 このプログラムを実行し、数値23を入力すると、
Enter number : 23
value (before if) = 134518488
value (in if) = 10
Input number is 10.
となります。この結果より、すでにif文の前でvalueの値がおかしいことに気づくでしょう。そこで、このprintf文の前のscanf文を確認すると、 valueの前にアドレス演算子(&)が抜けているのがわかります。