もうすぐクリスマス。かずのペーパークラフト作品クリスマス・ツリーとレゴのサンタだ。



 夜な夜なプレゼントを求めて,あちこち歩き回るネクタイ姿のサンタさんが全国で目撃される時節である。最近は,皆が寝静まった夜中にネットでこっそりとプレゼントを調達しているサンタさんもいるらしい。こうしろうが,サンタさんにお願いしたものは液晶ディスプレイに取り付ける『フィルター』。なかなかサンタさん思いなのである。

12月8日 期末テストも終り,C言語の勉強に力が入ってきたこうしろうが日経ソフトウエア連載『C/C++基礎の基礎』の記事に従い,ファイルの操作を学ぶ。



#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define INFILE "data3.txt"
int main(void)
{
 int c,d;
 FILE *fp;
 /* ファイルのオープン */
 fp = fopen(INFILE, "r");
 if (fp == NULL) {
  printf("ファイルがオープンできませんでした。 \n");
  exit(1);
 }
 /* 読み込んだ文字を大文字にして表示 */
 while(feof(fp) == 0) {
  c = fgetc(fp);
  d = toupper(c);
  putchar(d);
 }
 /* ファイルのクローズ */
 fclose(fp);
 return 0;
}


 fopen関数でファイルdata3.txtをオープンし,fgetcで一文字ずつデータを読み込む。data3.txtには,あらかじめThis is sample text.と入力してある。読み込んだ文字をd = toupper(c)で大文字に変換し,putcharで画面に出力するプログラムである。サンプルプログラムの入力,コンパイルは何の迷いもなくこなすようになってきた。

 憎たらしいので(笑),「この逆の処理を考えてごらん」と問題を出す。キーボードから入力された文字を読み込むgetcharとファイルに一文字ずつ書き込む関数fputcを使えばできるよと説明する。


#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define OUTFILE "data4.txt"
int main(void)
{
 char c;
 FILE *fp;
 /* ファイルのオープン */
 fp = fopen(OUTFILE, "w");
 if(fp == NULL) {
  printf("ファイルがオープンできませんでした。 \n");
  exit(1);
 }
 /* 入力された文字をファイルへ出力 */
 while((c = getchar()) != EOF)
  fputc(c,fp);
 /* ファイルのクローズ */
 fclose(fp);
 return 0;
}


 data4.txtという空のファイルを用意しておいて,fp = fopen(OUTFILE, "w")で出力用(Write)ファイルとしてオープンする。getchar関数で入力された文字を読み取り,fputc関数でファイルに書き込む。Ctrl+Zを押して終了させた後,エディタでdata4.txtを開く。入力した文字this is test text.が記憶されている。こうしろうの横顔に,少し自信がうかがえた(すこーし,ネッ!)。