それでは、先ほどのプログラムの要所にprintf文を挿入し、 valueの値を表示することによって、バグを見つけてみましょう。 printf文を挿入したプログラムを次に示します。valueの値とプログラムの進行状況を調べるために、 3箇所に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"); } }
このプログラムを実行し、数値23を入力すると、となります。この結果より、すでにif文の前でvalueの値がおかしいことに気づくでしょう。そこで、このprintf文の前のscanf文を確認すると、 valueの前にアドレス演算子(&)が抜けているのがわかります。Enter number : 23 value (before if) = 134518488 value (in if) = 10 Input number is 10.