名前 name と年齢 age の2つの変数で構成されるデータ構造 NameCard を 定義せよ。名前 name は、サイズが NAME_LEN バイドの文字列とする (NAME_LEN は #define で 21 と定義)。年齢 age は、整数型とする。この 構造体のソースファイル名を namecard.h とせよ。
標準入力からの入力を、問題1で定義した構造体に格納するサブルーチン nc_get() を作成せよ。つづいて、構造対に格納された情報を標準出力に出力 するサブルーチン nc_put() を作成せよ。このサブルーチンのソースファイル 名を namecard.c とせよ。
なお、NameCard のメモリを確保するサブルーチン nc_open() および、そ の開放のサブルーチン nc_free(NameCard *) も namecard.c に作成せよ。
namecard.h、namecard.c、prac0101.c を用いて、下記のコンパイルと実 行のできることを確認せよ。
make を用いてコンパイルをする。
> make prac0101 gcc -Wall -O3 -c namecard.c gcc -Wall -O3 -o prac0101 prac0101.c namecard.o >コンパイルに使用する Makefile と prac0101.c は、リンク先のファイルを使う。
ここで、./prac0101 を実行し、キーボードから、「Taro」と「22」をそれぞ れ入力している。「Taro(22)」は、nc_put() による出力である。
> ./prac0101 Taro 22 Taro(22) >
namecard.h と namecard.c の雛形
/* namecard.h */ #include 「FILE *を使うために…」 #define 「NAME_LEN が 21 と定義」 typedef struct { 「1つめのメンバ変数の宣言」 「2つめのメンバ変数の宣言」 } 「データ構造名」 NameCard *nc_open(); void nc_close(NameCard *); void nc_get(NameCard *, FILE *); void nc_put(NameCard *, FILE *); |
/* namecard.c */ #include 「NULLを使うために…」 #include 「malloc や free を使うために…」 #include 「strlen を使うために…」 #include 「構造体 NameCard を使うために…」 NameCard *nc_open() { 「NameCard を malloc」 「malloc できなければ、エラー終了」 「malloc の結果を返す」 } void nc_close(「NameCardへのポインタ」) { 「開放する」 } void nc_get(「NameCardへのポインタ」,「入力ファイル記述子」) { 「fgetsをして、NameCard のメンバ変数へ代入」 「長さを測る」 「最後の文字が \n ならばカットする」 「数値を NameCard のメンバ変数へ入力」 } void nc_put(「NameCardへのポインタ」,「出力ファイル記述子」) { fprintf(fout, "%s(%d)\n", src->name, src->age); } |
次回の演習開始時に集めます。
小レポートは採点後に、いったん返却します。返却されたレポートは各自 がファイルに綴じておいて下さい。最終レポートと同時にそのファイルを提出 してもらいます。その結果、初めて小レポートの点数を、成績に加算します。 なお、7月頃に、最後にファイルを提出してもらった後、ファイルは返却しま せんので、必要ならばコピーを作成しておき、提出して下さい。