🚪 はじめてのC
scanf("%d", &age); の次に置いた scanf("%c", &c) や fgets が、入力を待たずに素通りします。「聞かれないまま次に進んでしまう」典型症状です。
%d は数字の部分だけを読み取り、Enterキーで入った改行 \n を入力バッファに残します。次の %c や fgets が、その残った改行を最初の入力として読んでしまいます。
scanf(" %c", &c) のように書式の先頭に空白を1つ置くと、空白や改行を読み飛ばせます。明示的に捨てるなら int ch; while ((ch = getchar()) != '\n' && ch != EOF);。一番堅実なのは、入力は必ず fgets で1行受け取り、sscanf で解析する形に統一することです。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。