課題 [13] ファイル処理(5/9)

問 5(提出プログラム名:ex1305.c)

まず,講義で使用したサンプルプログラム 4 (sample4.c) を ex1305.c という別名のファイルにコピーしなさい.そして,ex1305.c を編集して次の処理を行うプログラムとして仕上げなさい.

【目的の処理】
サンプルプログラム 4 と同様にファイルのコピーを行う.
ただし,改行文字('\n')だけはコピーしない(無視する)こと.

こうすることで,コピー先のファイルには,コピー元のファイルの内容が 1 行に連なったかたちで書き込まれることになる.

【注意】
画面に表示させるメッセージの内容はサンプルプログラム 4 とほとんど同じであるが,最後のメッセージだけは「改行を無効にして」という表現に書き換える必要があるので忘れないこと.

また,この問題では改行文字をそもそもコピーしない(無視する)のが題意であるので誤解しないこと.この趣旨を誤解して,空白に置き換えるといったプログラムにしてしまうことのないよう注意せよ.

【ヒント】
fgetc でコピー元から読み込んだ 1 文字(変数 c の内容)が改行文字かどうかは次の if 文で判定できます:
 if ( c == '\n' ){ ...

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
コピー元のファイル名を入力してください: sample4.c
コピー先のファイル名を入力してください: aaa.c
sample4.c の内容を改行を無効にして aaa.c へコピーしました.
【実行例1でaaa.cに書き込まれる内容の一部】
#include <stdio.h>#define SIZE 256int main(void){ .... (以下省略)
  • 【プログラムの実行結果】(その2)赤字は実行時にキーボードから入力する内容
    このデータファイル data1305.txt をダウンロードして使ってください)
コピー元のファイル名を入力してください: data1305.txt
コピー先のファイル名を入力してください: bbb.txt
data1305.txt の内容を改行を無効にして bbb.txt へコピーしました.
【実行例2でbbb.txtに書き込まれる内容】
congratulations!

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
実行の画面出力やコピー先のファイルの内容が上の例と違うきちんと確認していない).
■ 注意書きを見落としていて,改行文字を空白等に置き換えてコピーしてしまっている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


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