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
入出力 / Input & Output
入出力入力フォーマット指定子出力フォーマット指定子「printf」関数を使って文字を出力・表示させる方法「printf_s」関数を使って文字を出力・表示させる方法「scanf」関数を使って入力させる方法「scanf_s」関数を使って入力させる方法「getchar」関数を使って「1文字」だけ入力させる方法「gets」関数を使って「文字列」を入力させる方法
文字列 / String
文字列 / String「snprintf」関数で「配列」に文字列を書き込む方法
ネットワーク / Network
memset - メモリブロックのセット
メモリー管理
メモリー
オペレーション / Operation
ファイルを操作をする方法コマンドラインプログラム / Command-Line Programプロセス / Processソケット通信 / Socket Communication
用語集 / Glossary
サブルーチン / Subroutineスタックとキュー / Stack & Cueスレッド / Thread
C言語標準ライブラリ(ヘッダファイル)
C言語標準ライブラリ【assert.h】 - 診断機能【complex.h】 - 複素数計算【ctype.h】 - 文字操作【errno.h】 - エラー【fenv.h】 - 浮動小数点環境【float.h】 - 浮動小数点型の特性【inttypes.h】 - 整数型の書式の変換【iso646.h】 - 代替つづり(Alternate spellings)【limits.h】 - 整数型の大きさ【locale.h】 - 文化圏固有操作【math.h】 - 数学【setjmp.h】 - 非局所分岐【signal.h】 - シグナル操作【stdalign.h】 - アライメント【stdarg.h】 - 可変個数の実引数【stdatomic.h】 - アトミック操作【stdbool.h】 - 論理型および論理値【stddef.h】 - 共通の定義【stdint.h】 - 整数型【stdio.h】 - 入出力【stdlib.h】 - 一般ユーティリティ【stdnoreturn.h】 - _Noreturn【string.h】 - 文字列操作【tgmath.h】 - 型総称数学関数(Type-generic math)【threads.h】 - マルチスレッド【time.h】 - 日付及び時間【uchar.h】 - Unicodeユーティリティ【wchar.h】 - 多バイトおよびワイド文字拡張ユーティリティ【wctype.h】 - ワイド文字種分類およびワイド文字大文字小文字変換ユーティリティ
C言語ライブラリ(ヘッダファイル)
C言語ヘッダファイル【winsock.h】





【C言語】入力フォーマット指定子 / Input Format Specifier

【C言語】
入力フォーマット指定子 / 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 以外では、入力データ先頭のホワイトスペースは読み飛ばされる。