練習 [9] 文字列(5/5)

練習 5(提出プログラム名:p0905a.c)※加点対象

この問題は中級クラスの受講生は必須ではない(提出しなくてもよい)が,
上級クラスの受講生は必須とする.
なお,どちらのクラスであっても適切に正解すれば加点対象として扱う.

まず,このプログラム(p0905a.c)をダウンロードしなさい.
そして,これを編集して以下の実行例のように実行できるようにしなさい.

この問題は,講義スライドの途中で紹介されている fgets を使って文字列を読み込み,それに対する処理を行う練習となっている.
fgets scanf と違って空白類(空白文字等)も入力に含めることができる.
それゆえ,以下の実行例のように空白文字で区切って複数の英単語をまとめて 1 つの配列へ格納することができる.

【編集すべき内容】
①以下の実行例のように各単語を 1 行に 1 個のかたちで出力させなさい.
 ここでは話を簡単にするため,単語の区切りには必ず空白類(空白文字や改行文字)が 1 個だけ使われているものとする.

② 単語をすべて出力した後に,単語数も出力させなさい.

【注意】
この問題では strlen といった文字列関係の標準ライブラリ関数を使ってはいけませんが,
講義スライドで紹介してある文字の種類判定関数(isspace 等)は使ってよいものとします.

【ヒント】
入力された文字列を先頭から末尾(ナル文字)まで見ていきながら,空白類に遭遇すれば改行し,そうでなければそのまま出力するようにすれば単語を出力できます.
空白類かどうかは isspace で判定できます.

  • 【プログラムの実行例】(その1)赤字は実行時にキーボードから入力する内容
英文を入力してください(最大 255 文字):
This is a sample input
[入力された英文]
This is a sample input

=== 単語列 ===
This
is
a
sample
input
==============
単語数 = 5
  • 【プログラムの実行例】(その2)赤字は実行時にキーボードから入力する内容
英文を入力してください(最大 255 文字):
Hello
[入力された英文]
Hello

=== 単語列 ===
Hello
==============
単語数 = 1

【過去にあったミス(減点となり,やり直しを命じられる)】
2 種類の実行例を確認せずに提出してしまっている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


第9回(Cプログラミング;3 限目の方)の練習問題は以上の5問です.
p0901a.c ~ p0905a.c を Moodle から提出してください.※ただし,p0905a.h は必須ではないです.
くれぐれも各問題で記載されている注意事項や「過去にあったミス」を見落とさないようにしてください.
なお,コンパイルエラーや無限ループになるプログラムを 1 個でも提出した場合は総合評価を 0 点とするので十分に注意すること.
なお,提出後に間違いに気付いた場合,〆切前であれば差し替え(上書き)は可能です.