C ライブラリ関数 -scanf()

C 標準ライブラリ - <stdio.h>

説明

C ライブラリ関数int scanf(const char *format, ...)標準入力 stdin からフォーマットされた入力を読み取ります。

宣言

以下は scanf() 関数の宣言です。

int scanf(const char *format, ...)

引数

  • format-- これは C 文字列で、以下の項目の1つ以上を含みます:空白文字、非空白文字とformat 指定子。

format 指定子の形式は次のとおりです:

[=%[*][width][modifiers]type=]

具体的な説明は以下のとおりです:

引数説明
*これはオプションのアスタリスクで、データがストリーム stream から読み取られることを示しますが、無視することができ、対応する引数には格納されません。
widthこれは、現在の読み取り操作で読み取る最大文字数を指定します。
modifiers対応する追加引数が指すデータに対して、整数型(d、i、n の場合)、符号なし整数型(o、u、x の場合)、または浮動小数点型(e、f、g の場合)とは異なるサイズを指定します: h :短整数型(d、i、n の場合)、または符号なし短整数型(o、u、x の場合) l :長整数型(d、i、n の場合)、または符号なし長整数型(o、u、x の場合)、または double 型(e、f、g の場合) L :long double 型(e、f、g の場合)
type1つの文字で、読み取るデータ型とデータの読み取り方法を指定します。詳細は次の表を参照してください。

scanf 型指定子:

型有効な入力引数の型
%a、%A 浮動小数点値を読み取ります(C99 でのみ有効)。float *
%c単一文字:次の文字を読み取ります。1 以外の幅 width が指定された場合、関数は width 個の文字を読み取り、引数を介して配列の連続する位置に格納します。末尾にはヌル文字は追加されません。char *
%d10進整数:数字の前の + または - 記号は省略可能です。int *
%e、%E、%f、%F、%g、%G浮動小数点数:小数点、オプションの前置符号 + または -、オプションの後置文字 e または E、および10進数字を含みます。有効な例として -732.103 と 7.12e4 があります。float *
%i10進数、8進数、16進数の整数を読み取ります。int *
%o8進整数。int *
%s文字列。空白文字(空白、改行、タブなど)に遭遇するまで連続する文字を読み取ります。char *
%u符号なし10進整数。unsigned int *
%x、%X16進整数。int *
%p ポインタを読み取ります。 
%[] 文字集合をスキャンします。 
%% % 記号を読み取ります。 
  • 追加引数-- さまざまな format 文字列に応じて、関数は一連の追加引数を必要とする場合があります。各引数には、format 引数で指定された各 % ラベルを置き換える、挿入される値が含まれます。引数の数は % ラベルの数と同じである必要があります。

戻り値

成功した場合、この関数は正常にマッチして代入された個数を返します。ファイルの末尾に到達したか、読み取りエラーが発生した場合は、EOF を返します。

例

以下の例は、scanf() 関数の使い方を示しています。

例

#include<stdio.h> int main(void) { int a,b,c; printf("3つの数字を入力してください:"); scanf("%d%d%d",&a,&b,&c); printf("%d,%d,%d\n",a,b,c); return 0; }

上記のプログラムをコンパイルして実行してみましょう。インタラクティブモードでは、次の結果が生成されます:

请输入三个数字:1 2 3
1,2,3

解析の説明:

  • 1、&a、&b、&cの&はアドレス演算子で、それぞれこれら3つの変数のメモリアドレスを取得します。
  • 2、%d%d%dは10進形式で3つの数値を入力します。入力時、2つのデータの間は1つ以上のスペース、Tab キー、Enter キーで区切ることができます。
を使用する場合,入力を区切るための%d、対応する入力時にも追加する必要があります。,:

例

#include<stdio.h> int main(void) { int a,b,c; printf("3つの数字を入力してください:"); scanf("%d, %d, %d",&a,&b,&c); printf("%d, %d, %d\n",a,b,c); return 0; }

上記のプログラムをコンパイルして実行してみましょう。インタラクティブモードでは、次の結果が生成されます:

请输入三个数字:1, 2, 3
1, 2, 3

注意:入力時,の前は必ず数字の直後に置き、数字と,の間にスペースを入れることはできません。

%c で入力する場合、スペースと「エスケープ文字」はどちらも有効な文字として扱われます。

例

#include<stdio.h> int main(void) { char a,b,c; printf("3つの文字を入力してください:"); scanf("%c%c%c",&a,&b,&c); printf("%c,%c,%c\n", a,b,c); return 0; }

上記のプログラムをコンパイルして実行してみましょう。インタラクティブモードでは、次の結果が生成されます:

$ ./a.out 
请输入三个字符:run
r,u,n
$ ./a.out 
请输入三个字符:r u n
r, ,u

次の例は、文字列の受け取りを示しています:

例

#include <stdio.h> int main() { char str1[20], str2[30]; printf("ユーザー名を入力してください:"); scanf("%s", str1); printf("あなたのWebサイトを入力してください:"); scanf("%s", str2); printf("入力したユーザー名:%s\n", str1); printf("入力したWebサイト:%s", str2); return(0); }

上記のプログラムをコンパイルして実行してみましょう。インタラクティブモードでは、次の結果が生成されます:

请输入用户名:admin
请输入您的网站:www.example.com
输入的用户名:admin
输入的网站:www.example.com

C 標準ライブラリ - <stdio.h>

その他の拡張