scanf

scanfは標準入力から入力されたデータを、指定の書式に基づいて、指定の変数や配列などに格納するC言語の標準ライブラリ関数・・・。

Man page of SCANF

標準入力とはキーボードのこと・・・。
指定の書式というのはちょっと置いといて・・・、
とにかく数値を入力したら、指定の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

このように・・・。

Sample/scanf.c at master · bg1bgst333/Sample · GitHub