見出し画像

続C言語教室 - 第1回 ファイル出力

C言語教室は、いったん終わりとしましたが、まだ取り上げていなかった課題がたくさん残っています。私のフォロワーさんの間でも、何故かC言語の話題が復活し始めていますし、そろそろ再開かなと思い始めました。

残念ながら我が家の教室の方は、子供たちの環境が大きく変わってしまったためにお休みのままですが、noteの方はボチボチと続けていこうと思います。もっとも今年も後期は大学の講義があるのでまたお休みがあるかもしれません。同じようで違う内容を並行して進めるのはなかなか難しいのであしからず。

さて、残していると思っている内容としては、

  • 2種類のファイル入出力ライブラリ

  • エラー処理とlongjmp

  • オブジェクト指向

  • メモリ管理

  • ログ出力とデバッグ支援

  • ネットワーク

  • プロセスとシグナル

  • 並行処理とスレッド

  • 高度なファイル処理

があると思っています。このあたりになると、もう入門ではなくて、それなりに高度な話になるかもしれませんが、これらの考え方は C++ などで必要になるものもたくさんあります、この順番でこの内容で進むかは定かではありませんが、これら以外にもリクエストがあれば取り上げるつもりですので、リクエストをお待ちしています。


さて、プログラミング言語を覚える時の定番として”Hello World”を出力するというのがあります。あまりに良くあるコードなのでC言語教室で取り上げることもしていなかったのですが、これは以下のコードで実現できます。

#include <stdio.h>
void main() {
  printf(”Hello World\n”);
}

printfというstdio.hというヘッダに宣言がある関数の引き数に文字列を書けば、それが出力されるという簡単なコードです。

同じように”Hello World\n”をファイルに書き込むにはどうすれば良いのでしょう。画面(標準出力)は特に準備も片付けもいらずに、いつでもどこでも出力できますが、ファイルに対して出力する時には、どんなファイルに出力するのかの準備と、出力を終えるための片付けが必要です。

この前準備として「ファイルを開く」関数と、片付けとして「ファイルを閉じる」関数を呼びます。開く関数はファイル構造体のポインタを返すので、これを変数にしまっておき、このファイルに対する処理を行う時には、このポインタを渡します。

#include <stdio.h>
void main() {
  FILE *file = fopen("output.txt", "w");
  fprintf(file, "Hello World\n");
  fclose(file);
}

ファイルを開く時には、そのファイルに対して「書き込むのか」「読み出すのか」などのモードを文字列で指定します。出力する時は”w”です。

プログラムを実行すると何も表示されずに終わります。ここでファイル一覧を確認すると、ちゃんと”output.txt”というファイルが出来ているはずです。どのように出力されたかは cat コマンドで確認できます。

$ cat output.txt
Hello World

念の為、ファイルの内容を16進数で確認してみましょう。UNIX(Linux)であれば hexdump -C output.txt かな、PowerShellだと fomat-hex -path “output.txt” ですね。

48 65 6C 6C 6F 20 57 6F 72 6C 64 0A (Linuxの場合)
48 65 6C 6C 6F 20 57 6F 72 6C 64 0D 0A (Windowsの場合)

何とこのように”\n”の改行コードは自動的に使っているOSに合わせてくれるようです。

ファイルに書く文字列の制御は fprintf とprintf は同じです。これで画面に出すときと同じようにファイルに書き出すことが出来るようになりましたね。

さて次回は、このファイルを読み込んでみますか。ファイル操作は入口は簡単に見えるのですが、これからだんだん奥深い世界が待っています。

なお、課題についてはなかなかシンドいので、教室とは別にクイズみたいな感じでやろうかなと思っています。教室と同じ進捗にならないかもしれませんが、回答と解説が思いの外、大変なんですよね。note の投稿でもそうでしたが、リアルな授業もこれが予想以上に大変で身にしみました。

ヘッダ画像は、以下のものを使わせていただきました。
https://www.irasutoya.com/2018/06/blog-post_923.html

#C言語 #プログラミング講座 #ファイル出力 #ファイル構造体 #復活

この記事が気に入ったらサポートをしてみませんか?