例題 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 型ですので,この時点で 文字コードに対応する「文字」 として解釈されます. |