トップページ > キーワード検索 > scanf()
C言語規格
C言語(その他)
プログラム
その他
scanf()
機能 指定の書式に従って標準入力ストリームからデータを入力することを表す。
stdinを指定したfscanf関数と等価
定義 #include <stdio.h>

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

※C99規格では以下の定義となる
int scanf ( const char * restrict format, ... );
引数
format変換書式文字列。
変換指定は文字%から始まり以下の指定が可能である。

変換指定の書式
  % [*] [フィールド幅] [長さ修飾子] 変換指定子

*代入抑止文字。入力を読み取るがオブジェクトへの代入は行わない事を表す
フィールド幅読み取る最大文字数(非負の10進整数で指定)
長さ修飾子変換後の値を代入するオブジェクトの大きさを指定する
長さ修飾子意味
hh(C99規格) signed char型またはunsigned char型であることを指定する
hshort int型またはunsigned short int型であることを指定する
llong int型またはunsigned long int型またはdouble型であることを指定する
ll(C99規格) long long int型またはunsigned long long int型であることを指定する
j(C99規格) intmax_t型またはuintmax_t型であることを指定する
z(C99規格) size_t型であることを指定する
t(C99規格) ptrdiff_t型であることを指定する
L(C99規格) long double型であることを指定する
変換指定子適用する変換の種類を指定する
変換指定子意味
d符号が省略可能な10進整数。代入する引数は符号付き整数型へのポインタ
i符号が省略可能な整数("0x"または"0X"で始まる値は16進数、"0"で始まる値は8進数、それ以外は10進数と解釈する)。代入する引数は符号付き整数型へのポインタ
o符号が省略可能な8進数整数。代入する引数は符号無し整数型へのポインタ
u符号が省略可能な10進整数。代入する引数は符号無し整数型へのポインタ
x符号が省略可能な16進整数。代入する引数は符号無し整数型へのポインタ
e, f, g

a (C99規格)
符号が省略可能な浮動小数点数。代入する引数は浮動小数点型へのポインタ
cフィールド幅で指定された長さの文字の並び。代入する引数は文字の並びが全て受け取れる大きさを持つ文字型へのポインタ
s非空白類文字の並び。代入する引数は終端ナル文字を含む全ての文字の並びが受け取れる大きさを持つ文字型へのポインタ
[ ]期待される文字集合の要素と一致する空でない文字の並び。代入する引数は終端ナル文字を含む全ての文字の並びが受け取れる大きさを持つ文字型へのポインタ
※ 文字集合は[ ]の中に期待する文字の並びを記述する。アクサンシルコンフレックス(^)を指定した場合は直後の文字の並びが現れないことを期待することを意味する。
p(C99規格) 処理系定義のポインタを表す文字の並びの集合。代入する引数はvoid型へのポインタのポインタ
n入力を読み取らない。これまでに入力ストリームから読み取れた文字数を代入する。代入する引数は符号付き整数型へのポインタ
%文字%と照合する。
...入力を格納する変数群(可変引数)
戻り値 代入された入力項目の個数を返す。
入力無しまたは入力誤りが発生した場合はEOFを返す。
実装例
#include <stdio.h>

int main(void)
{
    int n;
    float f;
    char s1[100];
    char s2[100];
    int ret;
    
    /* 整数値を読み込み n に代入 */
    ret = scanf("%d", &n);
    printf("ret=%d\n", ret);    /* scanfの戻り値を出力 */
    printf("n=%d\n", n);        /* 入力値を出力        */
    
    /* 最初に2桁の整数値を読み込んで n に代入      */
    /* 次に残りの入力のうち浮動小数点値を f に代入 */
    ret = scanf("%2d%f", &n, &f);
    printf("ret=%d\n", ret);    /* scanfの戻り値を出力 */
    printf("n=%d\n", n);        /* 入力値を出力        */
    printf("f=%f\n", f);        /* 入力値を出力        */
    
    /* 最初にa,b以外の文字列を読み捨て */
    /* 次にa,bを含む文字列を s1 に代入 */
    /* 次に残りの文字列を s2 に代入    */
    ret = scanf("%*[^ab]%[ab]%s", s1, s2);
    printf("ret=%d\n", ret);    /* scanfの戻り値を出力 */
    printf("s1=%s\n", s1);      /* 入力値を出力        */
    printf("s2=%s\n", s2);      /* 入力値を出力        */
    
    return 0;
}
実行結果
(123を入力)
ret=1
n=123
(123.45を入力)
ret=2
n=12
f=3.450000
(zzaabbccを入力)
ret=2
s1=aabb
s2=cc





inserted by FC2 system