10.サンプルプログラム2の動作を日本語で説明しなさい。とくに /*C*/で示されている行で’?n’が用いられている理由を?7.の解と関連させて述べなさい。
1 #include <stdio.h> 2 #define LEN 256 3 4 int main(void) { 5 char st[LEN]; 6 int i; 7 8 fgets(st, LEN, stdin); /* A */ 9 i = 0; /* B */ 10 while((st[i]) != '\n') { /* C */ 11 i++; /* D */ 12 } 13 14 printf("length of %s is %d\n", st, i); 15 return 0;
}
|
問題はこのプログラムの説明なのですべて記述することはできないので悪しからず。
ここではポイントを絞って解説をしたいと思う。
まず、2行目を見てもらいたい。
と書かれているが、これは
LENを256と言う定数と定義すると言うことだ。
つまり、LEN×2というと「2LEN」ではなく「512」ということだ。
マクロとはこういった定数を定義しておくものである。
また、定数は変数とは違って配列を宣言するときに添え字として宣言することも可能である。
次に8行目を見てもらいたい。
| fgets(st, LEN, stdin); /* A */ |
fgets()関数はもともと、FILE出力に使われるものだが、ここではstdin(標準出力)によってscanf()関数と同じように文字を入力することが可能である。
fgets()関数の使い方は以上のとおりである。
また、
入力された文字列の最後には必ず改行(\n)が入る。
10〜12行目は課題4-8でも紹介したとおりのwhile文による文字列の長さを調べるアルゴリズムである。
ここで、理解しておきたいことはfgets()関数の性質を利用していることである。