printf関数の詳細
printf
printf()関数はフォーマット出力関数であり、一般に標準出力装置(ディスプレイ、コンソールなどの端末)に所定のフォーマットで情報を出力するために用いられ、そのキーワードの最後のアルファベットfが「フォーマット」(format)の意味である.
出力される文字は、アルファベット、数字、スペース、およびいくつかの数字記号のほかに、いくつかのエスケープ文字を使用して特殊な意味を表すこともできます.
【例】printf関数の例
この例ではa,bの値を4回出力したが,フォーマット文字列によって出力の結果も異なる.3行目の出力文フォーマット文字列では、2つのフォーマット列%dの間にスペース(非フォーマット文字)が1つ追加されているため、出力されたa、bの値の間にスペースが1つあります. 4行目のprintf文フォーマット文字列に非フォーマット文字カンマが追加されたため、出力されたa、b値の間にカンマが追加されました. 5行目のフォーマット列は、a,b値を文字型で出力する必要がある. 6行目に出力結果を示すために非フォーマット文字列が追加されました.
printf関数は標準ライブラリ関数であり、c言語ではヘッダファイルstdioに定義されている.h中.C++のうち、cstdioとstdio.hこの2つの標準入出力ヘッダファイルにはprintf関数があります.
printf()関数の呼び出しフォーマットは、次のとおりです.
「」は、出力する内容とデータフォーマットの説明からなります.
出力の内容はまた2つの部分から構成して、その中の非フォーマット文字部分はそのまま出力します(表示の中でヒントの作用を果たすことができます);別の部分はフォーマットの規定の文字で、通常の意味の上でフォーマットは:
パラメータテーブルには、出力する必要がある一連のパラメータがあります.フォーマット文字列と数量とタイプで1つずつ対応する必要があります.パラメータ間は「」で区切られています.
flags
flagsは出力スタイルを規定し、値と意味は以下の通りである.
文字
文字名
説明
-
マイナス記号
左揃え、右揃えスペース(デフォルト右揃え)
-
プラス記号
数値の前に記号+または-
0
数値ゼロ
指定した列の幅がいっぱいになるまで、出力の前に0を足します(「-」は使用できません).
スペース
出力値が正の場合はスペース、負の場合はマイナス
#
井戸番号
typeがo、x、Xの場合、接頭辞0、0 x、0 Xを増加する.typeがe、E、f、g、Gの場合、必ず小数点を使用します.typeがg,Gの場合,末尾の0は保持する
width
出力の最小桁数を10進数整数で表します.実際のビット数が定義の幅より多い場合は実際のビット数で出力し、実際のビット数が定義の幅より少ない場合はスペースまたは0で補完します.この欄が数値ではなく'*'記号の場合、次のパラメータがパラメータ長として使用されることを示します.
prec
精度フォーマットは「.」先頭に10進数の整数が続く.数字を出力すると、小数の桁数を表します.出力が文字である場合、出力文字の個数を表す.実際の桁数が定義した精度数より大きい場合は、超えた部分を切り取ります.
precには、-正の整数の最小桁数-浮動小数点数で小数点数を表す-フォーマットは有効桁数の最大値を表す-%sフォーマットで文字列の最大長を表す-×シンボルは、次のパラメータ値が最大長であることを示します.
F|N|h|l
ポインタが遠ポインタか整数か長整数かを示す-F遠ポインタ-N近ポインタ-h短整数(short int)-l長整数(long int)(ここでdと組み合わせると%lldとなるとlong long int(C 99)、fと組み合わせると%llfとなるとlong double(C 99))
type
typeの文字は、出力データのタイプを規定するために使用され、以下の意味を含む.
文字
対応データ型
意味
d/i
int
整数値を受け入れて記号付きの10進数整数として表すiは旧式の書き方である
o
unsigned int
符号なし8進数整数(接頭辞0を出力しない)
u
unsigned int
符号なし10進整数
x/X
unsigned int
符号なし16進整数、x対応abcdef、X対応ABCDEF(プレフィックス0 xを出力しない)
f(lf)
float(double)
単精度浮動小数点数用f,二精度浮動小数点数用lf(特にscanfは混用できない)
e/E
double
科学計数法で表される数、ここで「e」の大文字と小文字は、出力時に用いる「e」の大文字と小文字を表す
g/G
double
有効桁数:%8 gは、単精度浮動小数点数が8桁の有効数字を保持することを示す.デュアル精度用lg
c
char
文字型.入力した数字をASCIIコードに応じて対応する文字に変換できます
s/S
char */wchar_t *
文字列.文字列の中の文字を文字列の中の空の文字まで出力します(文字列は'0'で終わり、この'0'は空の文字です).
p
void *
ポインタを16進数で出力
n
int *
この文字までに出力された文字の数は、テキストを出力しません.
%
入力なし
変換せずに文字'%'(パーセント)自体を出力
m
なし
errno値に対応するエラー内容を印刷します(例:printf("%m");
注意:%g、%Gは小数点数の4桁または指数が精度以上の場合は%e、%Eを使用し、そうでない場合は%fを使用します.
エスケープシーケンス
これらのエスケープシーケンスは、文字列内で自動的に対応するアクションコマンドに変換されます.
アイコン
意味
アイコン
意味
\a
ベル(アラーム)
\b
Backspace
\f
ページをかえる
折り返し
\r
リターンマッチ
\t
水平タブ
\v
垂直タブ
\’
一重引用符
\”
二重引用符
\
ぎゃくスラッシュ
\?
テキスト疑問符
ooo(例:024)
ASCIIワード(OC X)
xhh(例:x 20)
ASCII文字(HEX)
\xhhhh
ワイド文字(2バイトHEX)
例えば、WHARf=L’x 4 e 00’またはWHARb[]=L”The Chinese character for one isx 4 e 00”である.
例
printf()関数はフォーマット出力関数であり、一般に標準出力装置(ディスプレイ、コンソールなどの端末)に所定のフォーマットで情報を出力するために用いられ、そのキーワードの最後のアルファベットfが「フォーマット」(format)の意味である.
出力される文字は、アルファベット、数字、スペース、およびいくつかの数字記号のほかに、いくつかのエスケープ文字を使用して特殊な意味を表すこともできます.
【例】printf関数の例
#include
int main(void){
int a=88,b=89;
printf("%d %d
",a,b);
printf("%d,%d
",a,b);
printf("%c,%c
",a,b);
printf("a=%d,b=%d",a,b);
return 0;
}
この例ではa,bの値を4回出力したが,フォーマット文字列によって出力の結果も異なる.
printf関数は標準ライブラリ関数であり、c言語ではヘッダファイルstdioに定義されている.h中.C++のうち、cstdioとstdio.hこの2つの標準入出力ヘッダファイルにはprintf関数があります.
printf()関数の呼び出しフォーマットは、次のとおりです.
printf("", );
/**********( )*********/
int printf(const char *format,...);//* , , 。*
「」は、出力する内容とデータフォーマットの説明からなります.
出力の内容はまた2つの部分から構成して、その中の非フォーマット文字部分はそのまま出力します(表示の中でヒントの作用を果たすことができます);別の部分はフォーマットの規定の文字で、通常の意味の上でフォーマットは:
%[flags][width][.prec][F|N|h|l]type
,“%”で始めて、後に各種のフォーマットの文字が付いて、出力するデータのタイプ、形式、長さ、小数の桁数などを説明します.パラメータテーブルには、出力する必要がある一連のパラメータがあります.フォーマット文字列と数量とタイプで1つずつ対応する必要があります.パラメータ間は「」で区切られています.
flags
flagsは出力スタイルを規定し、値と意味は以下の通りである.
文字
文字名
説明
-
マイナス記号
左揃え、右揃えスペース(デフォルト右揃え)
-
プラス記号
数値の前に記号+または-
0
数値ゼロ
指定した列の幅がいっぱいになるまで、出力の前に0を足します(「-」は使用できません).
スペース
出力値が正の場合はスペース、負の場合はマイナス
#
井戸番号
typeがo、x、Xの場合、接頭辞0、0 x、0 Xを増加する.typeがe、E、f、g、Gの場合、必ず小数点を使用します.typeがg,Gの場合,末尾の0は保持する
width
出力の最小桁数を10進数整数で表します.実際のビット数が定義の幅より多い場合は実際のビット数で出力し、実際のビット数が定義の幅より少ない場合はスペースまたは0で補完します.この欄が数値ではなく'*'記号の場合、次のパラメータがパラメータ長として使用されることを示します.
prec
精度フォーマットは「.」先頭に10進数の整数が続く.数字を出力すると、小数の桁数を表します.出力が文字である場合、出力文字の個数を表す.実際の桁数が定義した精度数より大きい場合は、超えた部分を切り取ります.
precには、-正の整数の最小桁数-浮動小数点数で小数点数を表す-フォーマットは有効桁数の最大値を表す-%sフォーマットで文字列の最大長を表す-×シンボルは、次のパラメータ値が最大長であることを示します.
F|N|h|l
ポインタが遠ポインタか整数か長整数かを示す-F遠ポインタ-N近ポインタ-h短整数(short int)-l長整数(long int)(ここでdと組み合わせると%lldとなるとlong long int(C 99)、fと組み合わせると%llfとなるとlong double(C 99))
type
typeの文字は、出力データのタイプを規定するために使用され、以下の意味を含む.
文字
対応データ型
意味
d/i
int
整数値を受け入れて記号付きの10進数整数として表すiは旧式の書き方である
o
unsigned int
符号なし8進数整数(接頭辞0を出力しない)
u
unsigned int
符号なし10進整数
x/X
unsigned int
符号なし16進整数、x対応abcdef、X対応ABCDEF(プレフィックス0 xを出力しない)
f(lf)
float(double)
単精度浮動小数点数用f,二精度浮動小数点数用lf(特にscanfは混用できない)
e/E
double
科学計数法で表される数、ここで「e」の大文字と小文字は、出力時に用いる「e」の大文字と小文字を表す
g/G
double
有効桁数:%8 gは、単精度浮動小数点数が8桁の有効数字を保持することを示す.デュアル精度用lg
c
char
文字型.入力した数字をASCIIコードに応じて対応する文字に変換できます
s/S
char */wchar_t *
文字列.文字列の中の文字を文字列の中の空の文字まで出力します(文字列は'0'で終わり、この'0'は空の文字です).
p
void *
ポインタを16進数で出力
n
int *
この文字までに出力された文字の数は、テキストを出力しません.
%
入力なし
変換せずに文字'%'(パーセント)自体を出力
m
なし
errno値に対応するエラー内容を印刷します(例:printf("%m");
注意:%g、%Gは小数点数の4桁または指数が精度以上の場合は%e、%Eを使用し、そうでない場合は%fを使用します.
エスケープシーケンス
これらのエスケープシーケンスは、文字列内で自動的に対応するアクションコマンドに変換されます.
アイコン
意味
アイコン
意味
\a
ベル(アラーム)
\b
Backspace
\f
ページをかえる
折り返し
\r
リターンマッチ
\t
水平タブ
\v
垂直タブ
\’
一重引用符
\”
二重引用符
\
ぎゃくスラッシュ
\?
テキスト疑問符
ooo(例:024)
ASCIIワード(OC X)
xhh(例:x 20)
ASCII文字(HEX)
\xhhhh
ワイド文字(2バイトHEX)
例えば、WHARf=L’x 4 e 00’またはWHARb[]=L”The Chinese character for one isx 4 e 00”である.
例
#include
#include
int main(void)
{
charc,s[20],*p;
inta=1234,*i;
floatf=3.141592653589;
doublex=0.12345678987654321;
p="Howdoyoudo";
strcpy(s,"Hello,Comrade");
*i=12;
c='\x41';
printf("a=%d
",a);/* a=1234*/
printf("a=%6d
",a);/* 6 a=1234*/
printf("a=%06d
",a);/* 6 a=001234*/
printf("a=%2d
",a);/*a 2 , a=1234*/
printf("*i=%4d
",*i);/* 4 *i=12*/
printf("*i=%-4d
",*i);/* 4 *i=12*/
printf("i=%p
",i);/* i=06E4*/
printf("f=%f
",f);/* f=3.141593*/
printf("f=%6.4f
",f);/* 6 4
f=3.1416*/
printf("x=%lf
",x);/* x=0.123457*/
printf("x=%18.16lf
",x);/* 18 16
x=0.1234567898765432*/
printf("c=%c
",c);/* c=A*/
printf("c=%x
",c);/* ASCII c=41*/
printf("s[]=%s
",s);/* s[]=Hello,Comrade*/
printf("s[]=%6.9s
",s);/* 9 s[]=Hello,
Co*/
printf("s=%p
",s);/* s=FFBE*/
printf("*p=%s
",p);/* p=Howdoyoudo*/
printf("p=%p
",p);/* p=0194*/
getch();
return 0;
}