例題 2getchar 関数を使って文字を 1 つずつ順番に読み込み, それらを文字列として生成しなさい. ただし,文字列の長さは 64 未満とする.コーディング例1 /* 2 * プログラミング演習 第 10 回 3 * [例題 2] 4 * (C) 2006 Hirohisa AMAN <aman@cs.ehime-u.ac.jp, aman@computer.org> 5 */ 6 #include <stdio.h> 7 8 int main(void){ 9 char str[64]; 10 int i, c; 11 12 i = 0; 13 while ( (c = getchar()) != EOF ){ 14 str[i] = c; 15 i++; 16 } 17 str[i] = '\0'; /* 文字列の終端記号 */ 18 19 printf("入力文字列: %s\n", str); 20 21 return 0; 22 }
※左端の数字は行番号であり,ソースコードには含まれない点に注意!
コンパイル & 実行例$ gcc example10_2.c [Enter] $ ./a.out [Enter] $ aman@computer.org[Enter] [Ctrl]+[d] ← 入力の終了をプログラムに通知 入力文字列: aman@computer.org 解説プログラムの内容でいえば 例題1 と大きな違いはありません.読み込んだ文字を順番に配列へ格納し(14 行目), 最後に '\0' を書き込んでいる(17 行目)だけです.
むしろ getchar を使った文字の読み込みの方に戸惑うかもしれません.
13 while ( (c = getchar()) != EOF ){ 14 str[i] = c; 15 i++; 16 }にあるように, while 文の条件部の中で int 型変数 c に getchar の戻り値を代入しています. この時点で c には読み込んだ文字の 文字コード(整数) が代入されます. もしも入力が終了していた(ファイル終端:EOF = End Of File)場合は 繰り返しも終了します.(※実際には EOF = -1 と定義されています.) 14 行目ではこの文字コード c を str[i] に代入しています. str[i] は char 型ですので,この時点で 文字コードに対応する「文字」 として解釈されます. |