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言語】出力フォーマット指定子 / Output Format Specifier

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




出力フォーマット指定子

sprintf、vsprintf、printf などの関数では、% を使用して、出力するデータの書式を指定する。
printf(),fprintf(),sprintf()などで使用する指定子である。


指定子対応する型説明使用例
%cchar1文字を出力する"%c"
%schar *文字列を出力する "%8s", "%-10s"
printf( "%s", "123" );// → "123"
printf( "%-5s", "abc" ); // → "abc "
%dint, short整数を10進で出力する"%-2d","%03d"printf( "%4d", 456 );// → " 456"
%uunsigned int, unsigned short符号なし整数を10進で出力する"%2u","%02u"
%oint, short,unsigned int, unsigned short整数を8進で出力する"%06o","%03o"
%xint, short,unsigned int, unsigned short整数を16進で出力する"%04x"printf( "%05X", 254 );// → "000FE"
%ffloat実数を出力する "%5.2f"
printf( "%f", 12.56637061 );// → "12.566371"
printf( "%.2f", 12.56637061 ); // → "12.56"
%efloat実数を指数表示で出力する "%5.3e"
printf( "%e", 12.56637061 );// → "1.256637e+001"
%gfloat実数を最適な形式で出力する "%g"
printf( "%g", 12.56637061 ); // → "12.5664"
%ldlong倍精度整数を10進で出力する"%-10ld"
%luunsigned long符号なし倍精度整数を10進で出力する"%10lu"
%lolong, unsigned long倍精度整数を8進で出力する"%12lo"
%lxlong, unsigned long倍精度整数を16進で出力する"%08lx"
%lfdouble倍精度実数を出力する"%8.3lf"



出力変換指定子の構文


%[flags][width][.precision][modifier]type



flags (フラグ)

- 出力内容より width が大きい場合に、左に寄せて出力する。出力内容より width が小さい場合は、効果がありません。
+ 負でない数に「+」を付加します。type が数値でなければ無視される。
(空白) 同上
# 型がわかる形式で数値を出力する。
8 進数 先頭に 0 が付加される。
16 進数 先頭に 0x または 0X が付加される。
浮動小数点数 必ず小数点が出力される。g または G 形式の場合は、末尾の不要な 0 も削除されません。
, 整数を 3 桁ごとにカンマ (,) で区切ります。[LC]



width (出力幅)

(数字) 出力全体の桁数を指定します。
先頭に 0 を付けると、余分な桁は文字 0 で埋められる。
それ以外の場合は、スペース文字で埋められる。
* 次の int 型の引数で渡された値が使用される。値が負の場合は、左寄せになります。

printf( "i=%*d\n", 10, i ); // i を 10 桁で表示



precision (精度)

(数字) 出力桁数を指定します。負の precision は無視される。
ピリオドだけを記述して数値を省略すると、0 と見なされる。
効果は type によって異なります。
整数 - 出力内容が指定桁数に満たない場合は、左側に文字 0 が補充される。
出力内容が指定桁数を超える場合は、効果がありません。precision が 0 で出力も 0 の場合は、何も出力されません。
既定値は 1 です。

printf( "%5.3d", 12 );
// " 012" と表示される
f, e, E - 小数点以下の桁数を指定します。0 を指定すると、flags に # を指定しない限り、小数点も出力されません。既定値は 6 です。
g, G - 整数部と小数部を合わせた桁数を指定します。既定値は 6 です。
文字列 - 出力の最大桁数を指定します。
* width と同様に、次の int 型の引数で渡された値を使用する。



modifier (修飾子)

h type で整数を指定する場合に、引数が short 型であることを示す。Light C では int と short が同一なので、効果はない。
l type で整数を指定する場合に、引数が long 型であることを示す。
L type で小数を指定する場合に、引数が long double 型であることを示す。Light C では long double と double が同一なので、効果はない。
F type で文字列 (s) またはポインタ (p) を指定する場合に、引数が far ポインタであることを示す。
N type で文字列 (s) またはポインタ (p) を指定する場合に、引数が near ポインタであることを示す。



type (型)

引数の型を指定します。


d int 値を符号付き 10 進数として出力する。
i d と同じです。
u int 値を符号なし 10 進数として出力する。
X int 値を符号なし 16 進数として出力する。10 ~ 15 の桁は 'A' ~'F' で表される。
x int 値を符号なし 16 進数として出力する。10 ~ 15 の桁は 'a' ~'f' で表される。
o int 値を符号なし 8 進数として出力する。
q int 値を符号なし 4 進数として出力する。[LC]
b int 値を符号なし 2 進数として出力する。[LC]
p ポインタの値を 16 進数で出力する。
s ヌル終端文字列へのポインタを受け取り、文字列を出力する。
c int 値を文字として出力する。Shift-JIS の全角文字も出力できます。
S ワイド文字列を出力する。
C c と同じです。
f double 値を通常の小数表現で出力する。 (例:12.566371)。
e double 値を指数表現で出力する。(例:1.256637e+001)。
E e の代わりに E を出力することを除き、e と同じ。 (例:1.256637E+001)。
g 数値の大きさに応じて、f または e のいずれかの書式で出力します (例:12.5664、2.99792e+008)。数値の絶対値が大きすぎて precision の桁数に収まらない場合と、数値の絶対値が 0.0001 より小さい場合は、e 形式が使用される。それ以外の場合は、f 形式が使用される。
G e の代わりに E を出力することを除き、g と同じ。
n 次の引数で指される int 変数に、これまでに出力したバイト数を格納する。 例 printf( "xyz%n", &i ); // i に 3 が入る
  • % 自体を出力するには、「%%」と記述する。
  • char 型の数値は、関数に渡されるときに自動的に int 型に変換されるため (汎整数拡張)、int 型と同じように「%d」、「%X」などを使って表示可能。
  • float 型の数値は、関数に渡されるときに自動的に double 型に変換されるため、double 型と同じように「%f」、「%e」などを使って表示可能。