scanfは標準入力から入力されたデータを、指定の書式に基づいて、指定の変数や配列などに格納するC言語の標準ライブラリ関数・・・。
標準入力とはキーボードのこと・・・。
指定の書式というのはちょっと置いといて・・・、
とにかく数値を入力したら、指定のint型変数に格納したり、文字列を入力したら、指定のchar型配列に格納する・・・。
ここではscanfを使って指定の変数や配列に格納していく・・・。
$ vi scanf.c
数値や文字を格納するint型、float型、char型の変数、そして文字列を格納する長さ32のchar型配列を宣言・・・。
これらに1つずつ入力していく・・・。
まずは整数・・・。
1つ目の引数には、printfと同様に書式指定子"%d"を指定し、2つ目の引数に、変数のアドレスを指定する・・・。
変数のアドレスは、
&i
というように変数の前に'&'をつける・・・。この'&'はアドレス演算子と呼ばれている・・・。
scanfは入力が終わるまで待ち続け、
$ ./scanf i:
入力が終わると、
$ ./scanf i: 10 f:
次の処理に進む・・・。
入力の終わりは基本的にはリターンを押したとき・・・。
実数でも同様に、
と書く・・・。
i: 10 f: 1.23 c:
文字の場合は厄介・・・。
入力が連続する場合、
printf("c: "); scanf("%c", &c);
と書くと、直前の入力でscanfのバッファに残った改行文字'\n'を入力文字としてしまう現象がおこる・・・。
"%c"の前に"%*c"を入れることで、直前の改行文字は読み飛ばすようにできる・・・。
i: 10 f: 1.23 c: A str:
文字列の場合は、書式指定子"%s"を使う・・・。
配列の場合は、配列名が先頭アドレスを表すので、アドレス演算子は不要・・・。
入力が終わると、
i: 10 f: 1.23 c: A str: XYZ i = 10, f = 1.230000, c = A, str = XYZ
と1行で変数・配列の内容を出力している・・・。
次に、"指定の書式で入力された"文字列から、データを取り出して、変数や配列に格納する・・・。
スペースで区切って、複数データを入力する場合は、
scanf("%d %f %c %s", &i, &f, &c, str);
こんな風に書くと、各変数に格納してくれる・・・。
ex) 10 123 A ABC 20 456 X XYZ i = 20, f = 456.000000, c = X, str = XYZ
このように・・・。