《情報基礎論演習》 第7回
【ファイル入出力】
標準入力の行単位の読み込みは、fgets()関数を、文字単位の読み込みは、
fgetc()関数をそれぞれ使うこと。
また、標準出力への出力も、fputs(),fputc(),fprintf()などを使いなさい。(参照)
Basic 1,Basic 3,Basic 4,Advanced は、次の2つの方法で実行可能である。
実用的には、方法2のリダイレクションが使われる。
実行方法1 % basic1 (標準入力(キーボード)からの入力)
(行単位の入力で処理が進み、EOF(Ctrl-d)で終了)
実行方法2 % basic1 < basic1.c (入力のリダイレクションによる実行)
------------------------------------------------------------------
▼ Basic 1
標準入力からテキストを読み込み、各行頭に行番号を付けて標準出力に出力する
プログラムを作りなさい。
実行方法例
% basic1 < basic1.c
------------------------------------------------------------------
▼ Basic 2
2つのファイルが同一であるかを判定するプログラムを作りなさい。ファイルの
指定はコマンドライン(コマンド引数)から指定できるようにしなさい。
コマンド引数を使うには、main(int argc,char *argv[]) とする。
実行例
% basic2 basic2.c basic2.c
同一である
% basic2 basic1.c basic2.c
異なる
------------------------------------------------------------------
▼ Basic 3
標準入力からテキストを読み込み、指定した文字列が含まれている行だけを
標準出力に出力するプログラムを作りなさい。
文字列はコマンドライン(コマンド引数)から指定できるようにしなさい。
次の関数を使用すること。
char *strstr(char *s1, char *s2)
文字列s1の先頭から文字列s2を探し、見つかればその位置のポインタ、見
つからなければNULLを返す
この関数を利用するには、#include <string.h> が必要です。
実行方法例
% basic3 char < basic3.c
(basic3.cを読み込み、"char"という文字列のある行のみを出力する)
------------------------------------------------------------------
▼ Basic 4
"//"という文字列から行末までをコメントとみなすプログラミング言語がある。
このような言語のソースプログラムを標準入力から読み込み、コメント部を除
去して標準出力に出力するプログラムを作りなさい。// 例:ここがコメント
上記の関数strstr()を使用してもよい。
サンプルデータとして、"~izumi/efcs/s7b4.c"が用意してある。
実行方法例
% basic4 < s7b4.c
------------------------------------------------------------------
▽ Advanced
C言語で書かれたソースプログラムを標準入力から読み込み、コメント部を除去
して標準出力に出力するプログラムを作りなさい。ただし、コメントのネスト
はC言語では認められていないので、ないと仮定してよい。
(コメントのネストの例: /* /* コメントの中のコメント */ */)
複数行に渡るコメントも処理できるようにすること。
サンプルデータとして、"~izumi/efcs/s7a.c" が用意してある。
実行方法例
% advanced < s7a.c