C ライブラリ関数 -scanf()
説明
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 の場合) |
| type | 1つの文字で、読み取るデータ型とデータの読み取り方法を指定します。詳細は次の表を参照してください。 |
scanf 型指定子:
| 型 | 有効な入力 | 引数の型 |
|---|---|---|
| %a、%A | 浮動小数点値を読み取ります(C99 でのみ有効)。 | float * |
| %c | 単一文字:次の文字を読み取ります。1 以外の幅 width が指定された場合、関数は width 個の文字を読み取り、引数を介して配列の連続する位置に格納します。末尾にはヌル文字は追加されません。 | char * |
| %d | 10進整数:数字の前の + または - 記号は省略可能です。 | int * |
| %e、%E、%f、%F、%g、%G | 浮動小数点数:小数点、オプションの前置符号 + または -、オプションの後置文字 e または E、および10進数字を含みます。有効な例として -732.103 と 7.12e4 があります。 | float * |
| %i | 10進数、8進数、16進数の整数を読み取ります。 | int * |
| %o | 8進整数。 | int * |
| %s | 文字列。空白文字(空白、改行、タブなど)に遭遇するまで連続する文字を読み取ります。 | char * |
| %u | 符号なし10進整数。 | unsigned int * |
| %x、%X | 16進整数。 | 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 キーで区切ることができます。
例
#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その他の拡張