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

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

まず,このプログラム(ex0902a.c)をダウンロードしなさい.
そして, この中の print_local 関数と print_domain 関数を完成させ,
次の仕様のプログラムに仕上げなさい(実行例も参照せよ).

【目的の動作】
 入力されたメールアドレスをそのまま(文字数とともに)出力した後,
 ① ローカル部< > で囲んだかたちで出力し,
 ② @ の代わりに (at) と出力し,
 ③ ドメイン[ ] で囲んだかたちで出力し,最後に改行を出力する.

ただし,main 関数の中を書き換えてはいけません.

【ヒント】
この問題ではメールアドレスの内容を書き換える必要はありません
単に所定のルールに従って画面へ出力するだけで大丈夫です.
(書き換えようとすると,元とは文字数も異なるためプログラミングの難易度が上がってしまいます)

【例年よくあるミス】
上の③の動作をさせるために
  while ( mail[i] != '\0' )
  {
    i++;
    printf("%c", mail[i];
  }

と書いてしまう人がいますが,これは間違いです.
なぜなら,printf の前に i++ を実行してしまっているので,
mail[i] がナル文字(\0)であってもそれをチェックすることなく
出力してしまうから
です.

この場合,i++printf よりも後でないとおかしいです.
(おそらくは '@' の分だけ 1 文字ずれるのでこのように
 書いてしまったものと思いますが,それであれば
 while の前にも i++; を書けば解決します)

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
    ※記号や空白も含めて,実行例と全く同じであることを必ず確認せよ.
    例年,==> の部分で @ を出力していたり,
    .jp] の間に不要な文字を出力していたり,
    ナル文字まで表示させようとしていたりするミスが多く見られます.
メールアドレスを入力してください:
aman@ehime-u.ac.jp
アドレスは aman@ehime-u.ac.jp (18 文字)
==> <aman>(at)[ehime-u.ac.jp]

  • 【プログラムの実行結果】(その2)赤字は実行時にキーボードから入力する内容
メールアドレスを入力してください:
aman.hirohisa.mm@ehime-u.ac.jp
アドレスは aman.hirohisa.mm@ehime-u.ac.jp (30 文字)
==> <aman.hirohisa.mm>(at)[ehime-u.ac.jp]

  • 【プログラムの実行結果】(その3)赤字は実行時にキーボードから入力する内容
メールアドレスを入力してください:
n520987x@mails.cc.ehime-u.ac.jp
アドレスは n520987x@mails.cc.ehime-u.ac.jp (31 文字)
==> <n520987x>(at)[mails.cc.ehime-u.ac.jp]

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


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