課題 [12] ポインタ②(7/9)

問 7(提出プログラム名:ex1207.c)

まず,問 5 で作った ex1205.cex1207.c という別名のファイルにコピーしなさい.
そして,ex1207.c を編集して次のように内容を変更しなさい:

【問 5 からの変更点】
 読み込んだ文字列の長さが 5 文字未満(5 文字より短い)場合
 足りない文字数分だけその文字列の末尾に '*' を追加する.

【ヒント】
scanf で読み込んだ文字列が配列 word に格納されていた場合,この長さが 5 文字未満ならば末尾に * を追加しなければならないことになります.
そこで,while 文を使って
  (int)strlen(word) < 5 である限り strcat(word, "*"); を繰り返す
という処理を行うとよいです.
※もともと word の文字数が 5 以上ならば while の条件は成立しないので特に追加は起こりません.

strlen の戻り値は符号なし整数になっていて int 型とは微妙に違う型になっています.
それゆえ,上のように int 型へキャストして使うのが安全です.

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
    実行例にあるように This*is*** の間には空白が必要なのでそれを忘れないこと!
文字列を入力してください:This
これまでの文字列:[This*] (5文字)
文字列を入力してください:is
追加後の文字列:[This* is***] (11文字)
文字列を入力してください:a
追加後の文字列:[This* is*** a****] (17文字)
文字列を入力してください:sample
追加後の文字列:[This* is*** a**** sample] (24文字)
  • 【プログラムの実行結果】(その2)赤字は実行時にキーボードから入力する内容
文字列を入力してください:C
これまでの文字列:[C****] (5文字)
文字列を入力してください:programming
追加後の文字列:[C**** programming] (17文字)
文字列を入力してください:exercise
追加後の文字列:[C**** programming exercise] (26文字)

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
実行の画面出力が上の例と違うきちんと確認していない).
 例えば,追加される * の個数が違っている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


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