ITメモ
C言語 / Programming Language C
開発環境 / Development Environment
【Mac】Xcode【Win】Visual Stadio
基礎 / Basic
About C言語書式コンパイルとリンクメイクファイル / Makefileヘッダファイル変数定数型 / Type配列 / Arrayポインタ / Pointer演算子 / Operator制御文 / Control Statement関数構造体と共用体 / Structure & Unionプリプロセッサ / PreprocessorthisキーワードTypedef
文字列 / String
文字列 / Stringsnprintf - 文字列書式に従って指定文字数分だけ文字配列に書き込む
ネットワーク / Network
memset - メモリブロックのセット
メモリー管理
メモリー
入出力 / Input & Output
入出力入力フォーマット指定子出力フォーマット指定子
オペレーション / Operation
ファイル操作 / File Operationコマンドラインプログラム / Command-Line Programプロセス / Processソケット通信 / Socket Communication
用語集 / Glossary
サブルーチン / Subroutineスタックとキュー / Stack & Cueスレッド / Thread
C言語標準ライブラリ(ヘッダファイル)
C言語標準ライブラリC言語標準ライブラリ【assert.h】 - 診断機能C言語標準ライブラリ【complex.h】 - 複素数計算C言語標準ライブラリ【ctype.h】 - 文字操作C言語標準ライブラリ【errno.h】 - エラーC言語標準ライブラリ【fenv.h】 - 浮動小数点環境C言語標準ライブラリ【float.h】 - 浮動小数点型の特性C言語標準ライブラリ【inttypes.h】 - 整数型の書式の変換C言語標準ライブラリ【iso646.h】 - 代替つづり(Alternate spellings)C言語標準ライブラリ【limits.h】 - 整数型の大きさC言語標準ライブラリ【locale.h】 - 文化圏固有操作C言語標準ライブラリ【math.h】 - 数学C言語標準ライブラリ【setjmp.h】 - 非局所分岐C言語標準ライブラリ【signal.h】 - シグナル操作C言語標準ライブラリ【stdalign.h】 - アライメントC言語標準ライブラリ【stdarg.h】 - 可変個数の実引数C言語標準ライブラリ【stdatomic.h】 - アトミック操作C言語標準ライブラリ【stdbool.h】 - 論理型および論理値C言語標準ライブラリ【stddef.h】 - 共通の定義C言語標準ライブラリ【stdint.h】 - 整数型C言語標準ライブラリ【stdio.h】 - 入出力C言語標準ライブラリ【stdlib.h】 - 一般ユーティリティC言語標準ライブラリ【stdnoreturn.h】 - _NoreturnC言語標準ライブラリ【string.h】 - 文字列操作C言語標準ライブラリ【tgmath.h】 - 型総称数学関数(Type-generic math)C言語標準ライブラリ【threads.h】 - マルチスレッドC言語標準ライブラリ【time.h】 - 日付及び時間C言語標準ライブラリ【uchar.h】 - UnicodeユーティリティC言語標準ライブラリ【wchar.h】 - 多バイトおよびワイド文字拡張ユーティリティC言語標準ライブラリ【wctype.h】 - ワイド文字種分類およびワイド文字大文字小文字変換ユーティリティ
C言語ライブラリ(ヘッダファイル)
C言語ヘッダファイル【winsock.h】





入力フォーマット指定子 / Input Format Specifier




入力フォーマット指定子 とは

sscanf、vsscanf、scanf などの関数では、% を使用して、入力するデータの書式を指定します。たとえば、次のようになります。




入力変換指定子の構文


%[*][width][modifier]type]



入力変換指定子の構文は、多くの点で出力変換指定子と同じ。
「modifier」と「type」により、sscanf 関数などの引数に指定する変数の型が決まる。


sscanf( "AAABBC", "[AB]", a ); // a="AAABB" (簡易正規表現)

指定子対応する型説明
%cchar 1文字を入力する
sscanf( "ABC", "%c", a ); // a[0]='A'
sscanf( "ABC", "%2c", &a ); // a[0]='A', a[1]='B'
%schar * 文字列を入力する
sscanf( "ABC", "%s", a ); // a[]="ABC"
sscanf( "ABC", "%2s", a ); // a[]="AB"
%dint 整数を10進数として入力する
sscanf( "123", "%d", &i ); // i=123
sscanf( "123", "%2d", &i ); // i=12
sscanf( "1,2", "%d,%d", &i, &j ); // i=1, j=2
%uunsigned int符号なし整数を10進数として入力する
%oint, short, unsigned int整数を8進数として入力する
%xint, unsigned int整数を16進数として入力する
%ffloat 実数を入力する
sscanf( "314e-2", "%f", &f ); // f=3.14
%hdshort単精度整数を10進数として入力する
%ldlong 倍精度整数を10進数として入力する
sscanf( "123", "%ld", &li ); // li=123
%huunsigned short符号なし単精度整数を10進数として入力する
%luunsigned long符号なし倍精度整数を10進数として入力する
%lolong, unsigned long倍精度整数を8進数として入力する
%lxlong, unsigned long倍精度整数を16進数として入力する
%lfdouble 倍精度実数を入力する
sscanf( "314e-2", "%lf", &d ); // d=3.14
[指定文字]- 指定した文字を変数に格納する。
sscanf( "AAABBC", "[AB]", a ); // a="AAABB" (簡易正規表現)





* (アスタリスク)

% の直後に * を指定すると、そのデータは、変数に格納されずに読み飛ばされる。この場合、対応するアドレスを scanf などの引数に渡す必要はない。

int i;


sscanf( "1,2,3", "%*d,%*d,%d", &i );
// i=3


width (出力幅)
入力データの最大バイト数を 10 進文字列で指定します。type が p の場合は無視される。

int a, b, c;


sscanf( "12345", "%1d%2d%3d", &a, &b, &c );
// a=1, b=23, c=45




modifier (修飾子)

指定 説明
h type で整数を指定する場合に、引数が int ではなく short へのポインタであることを示す。Light C では int と short が同一なので、効果はない。
l type が整数の場合は引数が int ではなく long へのポインタであることを示し、type が小数の場合は引数が float ではなく double へのポインタであることを示す。
L type で小数を指定する場合に、引数が long double 型であることを示す。Light C では long double と double が同一なので、効果はない。
F 引数が far ポインタであることを示す。ただし、type が p の場合は、引数でポイントされるポインタが far であることを示す。
N 引数が near ポインタであることを示す。ただし、type が p の場合は、引数でポイントされるポインタが near であることを示す。



type (型)

文字列をどのような種類の値として解釈するかを指定します。


指定
d,i,u,x int* または unsigned*
ld,LI,lu,,lx long* または unsigned long*
f,e,g float*
lf,le,lg double*
c,s char*
C,S wchar_t*
n int*
p void**
Fp void far**
Np void near**
Fd int far*
Nd int near*


指定 解析される文字列の構文 説明
d, i [+|-]ddd 文字列を符号付き 10 進数として解析し、結果を (long) int に格納します。
u [+]ddd 文字列を符号なし 10 進数として解析し、結果を (unsigned long) int に格納します。
X, x [+][0x|0X]hhh 文字列を 16 進数として解析し、結果を (unsigned long) int に格納します。文字列の先頭に 0x または 0X が付いていてもかまいません。
o [+]ddd 文字列を 8 進数として解析し、結果を (unsigned long) int に格納します。
q [+]ddd 文字列を 4 進数として解析し、結果を (unsigned long) int に格納します。[LC]
b [+]ddd 文字列を 2 進数として解析し、結果を (unsigned long) int に格納します。[LC]
p hhh または hhh:hhh ポインタ値の表現を読み込みます。small/medium モデルの場合と、modifier に N を指定した場合は、4 桁以下の 16 進数を入力し、near ポインタとして格納します。そうでない場合は、4 桁以下の 16 進数、コロン (:)、および 4 桁以下の 16 進数を順に入力し、far ポインタとして格納します。
s [^ \t\n\v\f\r]... ホワイトスペース以外のバイトを連続して入力し、末尾に 0 を付加して、結果を char [ ] に格納します。
c (任意の n バイト) 1 バイトを入力し、結果を char に格納します。width を指定した場合は、そのバイト数分のデータを連続して入力し、結果を char [ ] に格納します。
S [^ \t\n\v\f\r]... s と似ていますが、結果を wchar_t [ ] に格納する点が異なります。
C c と似ていますが、結果を wchar_t または wchar_t [ ] に格納する点が異なります。
f,e,g,E,G [+|-][ddd][.ddd][{E|e}ddd] 文字列を小数として解析し、結果を float または double に格納します。
n これまでに入力したバイト数を int に格納します。
c と C 以外では、入力データ先頭のホワイトスペースは読み飛ばされる。



; ;