>>515
そも、それでは「数字以外を入力すると暴走」と同じ現象になる。
#scanf()が使いづらいのは、入力を拒否することにあるというのが判らないなら使わん方がいい。

>>514
少なくとも暴走するよりはましではないか?

>>513
二次元配列の問題とコメント文字。
#いや、C99なら別にいいのだが。

>>512
>・配列の範囲外をアクセスしてはいけない。
a[3][3]はどこを指すか考えてみるといい。そこは、アクセス禁止だ。

>・b配列に入れる必然性がない。
例えば、char b;と定義して、if (a[i][j] == 1) b = 'O'; else if (a[i][j] == 2) b = 'X'; else b = ' ';でことが足りる。
配列にする必要はない。
或いは、 char const b[] = " OX";と定義してprintf("%c ", b[a[i][j]]);でも充分。