課題 [10] 文字列(2/9)

問 2(提出プログラム名:ex1002.c)

このプログラム(ex1002.c)をダウンロードし,その中の関数 print_birthday を完成させなさい
この問題では,生年月日として有効な日付のみが入力されるものと仮定してプログラムを作ってよい.

関数 print_birthday は,引数で与えられた文字列(char 配列)str について,その文字列が表している生年月日(YYYYMMDD 形式)を以下の実行例のように
あなたは YYYY 年 MM 月 DD 日生まれですか⏎」
という形式で表示するものとする(YYYY が西暦,MM と DD が月と日に対応).
なお,この問題に限ってはマクロ SIZE に関係なく,4 や 8 といった数字を直接書いて良いものとする.
ただし,関数 main の内容は一切書き換えないこと.

【注意】
この問題では引数で与えられた char 配列 str 内の文字のうち,
適切な範囲のみを出力させることを題意としているが,
  printf("あなたは %c%c%c%c 年 %c%c 月 %c%c 日生まれですか\n", str[0], str[1], str[2], str[3], str[4], str[5], str[6], str[7]);
といった感じで直接 1 文字ずつ指定するような書き方をしてはいけません
(これは一般に「力技(ちからわざ)」と揶揄される書き方である.)
このような力技ではなく, for 文等を適切に使いなさい.

【ヒント】
この問題では与えられた文字列を書き換える必要はありません
YYYY, MM, DD それぞれに該当する範囲の文字を出力させるだけで十分です.

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
生年月日を YYYYMMDD 形式で入力してください:
20010401
あなたは 2001 年 04 月 01 日生まれですか
  • 【プログラムの実行結果】(その2)赤字は実行時にキーボードから入力する内容
生年月日を YYYYMMDD 形式で入力してください:
20200630
あなたは 2020 年 06 月 30 日生まれですか

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
実行の画面出力が上の例と違うきちんと確認していない).
■ printf で 1 文字だけを出力するのに %c ではなく %s を指定してしまっている.
注意書きを見落としていて main 関数の中身を書き換えてしまっている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


ミスが無いことを確認したら次の問題へ → [ 問3 (ex1003.c) ]