🚪 はじめてのC
scanf("%d", n); と書くと gcc は warning: format '%d' expects argument of type 'int *', but argument 2 has type 'int' [-Wformat=]。実行して数値を入力した瞬間に Segmentation fault (core dumped) で落ちます。
scanf は「読み取った値を書き込む先の番地」を必要とします。n を渡すと、n に入っている値(未初期化ならゴミの数値)を番地とみなして、そこへ書き込みにいきます。
scanf("%d", &n); のように & で番地を渡します。ただし char s[32] のような配列名は、それ自体が先頭番地なので & は不要です(scanf("%31s", s))。警告の段階で気づけるよう -Wall を常用します。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。