C言語におけるprintf()関数、sprintf()関数、scanf()関数、sscanf()関数
4921 ワード
printf()
構文:
printf()関数はformat(フォーマット)で与えられたフォーマットに従ってstdOUT(標準出力)および他のパラメータに印刷出力する.戻り値は、出力される文字の数です.
sprintf()
構文:
sprintf()関数はprintf()関数と同様で、フォーマット制御は完全に同じであり、printfが使用するフォーマット文字列であればsprintfでも使用でき、buffe(バッファ)に出力を送信するだけである.戻り値は書き込み文字数です.
機能1:数値文字列のフォーマット
sprintf(s,“%-8x”,12345);//sは、「12345」大文字のxは16進数大文字で、幅は8つの位置を占め、「-」は左揃えを表します.
機能二、制御浮動小数点数印刷フォーマット
浮動小数点数はフォーマット記号「%f」で制御され、デフォルトでは小数点以下6桁の数字「%m.nf」のフォーマットが保持され、ここでmは印刷の幅を表し、nは小数点以下の桁数sprintf(s,「%0.3 f」,3.1415626)を表し、「3.142」になる
機能3:2つの文字列を接続する
直接接続:
文字列の一部を切り取って接続
機能四:文字/ASCIIコード照合
「%d」または「%x」を使用して文字を印刷すると、その10進数、または16進数のASCIIコードが得られることを知っています.逆に「%c」を使用して整数を印刷すると、対応するASCII文字が表示されます.以下のセグメントは、すべての可視文字のASCIIコード対照表を画面に印刷します(ここではprintfを使用し、「#」と「%x」を併用すると自動的に16進数に「0 x」の接頭辞が追加されます).
機能5:アドレス情報を印刷する
デバッグ時には、いくつかの変数やメンバーのアドレスを表示したい場合があります.アドレスやポインタも32桁にすぎないため、記号のない整数を印刷する「%u」を使用して印刷することができます.
しかし、通常は10進数ではなく16進数でアドレスを表示するのが好きです.
しかしながら、これらは間接的な方法であり、sprintfはアドレスの印刷にいくつかの専門的な「%p」を提供する.
実際には
機能六:戻り値の利用
printfとsprintfの戻り値は、書き込まれた文字数です.すなわち、sprintf呼び出しが終了するたびに、strlenを呼び出す必要がなくなり、結果文字列の長さがわかります.のように
scanf
構文:
scanf()関数はformat(フォーマット)で指定したフォーマットに基づいてstdin(標準入力)から読み出し、他のパラメータにデータを保存します.
sscanf
構文:
関数sscanf()はscanf()関数と似ていますが、buffer(バッファ)から読み込む入力だけです.
sscanfはscanfと同様に入力に用いられるが,後者はスクリーン(stdin)を入力源とし,前者は固定文字列を入力源とする.
使用方法:
%[]は、1つの文字セットを読み込むことを意味し、[後の最初の文字が"^"であれば、逆の意味を表します.[]内の文字列は1以上の文字で構成され、空の文字セット(%[])は規定に違反し、予知できない結果をもたらす可能性があります.%[^]も規定違反です.
%[a-z]は、a-z間の文字列を読み込み、それ以前に停止しない場合は、次のようにします.
%[^a-z]はa-z間でない文字列を読み込み、a-z間の文字に触れると停止します.
%*[^=]前の*番号は変数を保存しないことを示します.条件を満たす文字列をスキップします.
%40 c 40文字を読み込む
%[^=]文字列が"="にぶつかるまで読み取り、"^"の後ろには次のような文字を追加できます.
パラメータフォーマットが%[^=:]の場合、note pad:1.0.0.1001からnote padを読み込むこともできます.
構文:
#include
int printf(const char* format,...);
printf()関数はformat(フォーマット)で与えられたフォーマットに従ってstdOUT(標準出力)および他のパラメータに印刷出力する.戻り値は、出力される文字の数です.
sprintf()
構文:
#include
int sprintf(char *buffer,const char *format,......);
sprintf()関数はprintf()関数と同様で、フォーマット制御は完全に同じであり、printfが使用するフォーマット文字列であればsprintfでも使用でき、buffe(バッファ)に出力を送信するだけである.戻り値は書き込み文字数です.
機能1:数値文字列のフォーマット
sprintf(s,“%-8x”,12345);//sは、「12345」大文字のxは16進数大文字で、幅は8つの位置を占め、「-」は左揃えを表します.
機能二、制御浮動小数点数印刷フォーマット
浮動小数点数はフォーマット記号「%f」で制御され、デフォルトでは小数点以下6桁の数字「%m.nf」のフォーマットが保持され、ここでmは印刷の幅を表し、nは小数点以下の桁数sprintf(s,「%0.3 f」,3.1415626)を表し、「3.142」になる
機能3:2つの文字列を接続する
直接接続:
char dest[256];
char src1[ ]={‘a’,‘b’,‘c’,‘d’,‘e’};
char src2[ ]={'1','2','3','4'};
sprintf(dest ,"%.5s%.4s",src1,src2); // :‘abcd1234’
文字列の一部を切り取って接続
char dest[256];
char src1[ ]={‘a’,‘b’,‘c’,‘d’,‘e’};
char src2[ ]={'1 ','2' ,' 3','4'};
sprintf(dest ,"%.*s%.*s",2,src1,3,src2); // :‘ab123’
機能四:文字/ASCIIコード照合
「%d」または「%x」を使用して文字を印刷すると、その10進数、または16進数のASCIIコードが得られることを知っています.逆に「%c」を使用して整数を印刷すると、対応するASCII文字が表示されます.以下のセグメントは、すべての可視文字のASCIIコード対照表を画面に印刷します(ここではprintfを使用し、「#」と「%x」を併用すると自動的に16進数に「0 x」の接頭辞が追加されます).
for(int i =32;i<127;i++){
printf("[%c]:%3d 0x%#04x
",i,i,i);
}
機能5:アドレス情報を印刷する
デバッグ時には、いくつかの変数やメンバーのアドレスを表示したい場合があります.アドレスやポインタも32桁にすぎないため、記号のない整数を印刷する「%u」を使用して印刷することができます.
sprintf(s,“%u”,&i);
しかし、通常は10進数ではなく16進数でアドレスを表示するのが好きです.
sprintf(s,“%08x”,&i);
しかしながら、これらは間接的な方法であり、sprintfはアドレスの印刷にいくつかの専門的な「%p」を提供する.
sprintf(s,“%p”,&i);
実際には
sprintf(s,“%0*x”,2*sizeof(void *),&i);
機能六:戻り値の利用
printfとsprintfの戻り値は、書き込まれた文字数です.すなわち、sprintf呼び出しが終了するたびに、strlenを呼び出す必要がなくなり、結果文字列の長さがわかります.のように
int len=sprintf(s,“%d”,i);
scanf
構文:
#include
int scanf(const char *format,.....);
scanf()関数はformat(フォーマット)で指定したフォーマットに基づいてstdin(標準入力)から読み出し、他のパラメータにデータを保存します.
sscanf
構文:
#include
int sscanf(const char *buffer,const char *format,....);
関数sscanf()はscanf()関数と似ていますが、buffer(バッファ)から読み込む入力だけです.
sscanfはscanfと同様に入力に用いられるが,後者はスクリーン(stdin)を入力源とし,前者は固定文字列を入力源とする.
使用方法:
%[]は、1つの文字セットを読み込むことを意味し、[後の最初の文字が"^"であれば、逆の意味を表します.[]内の文字列は1以上の文字で構成され、空の文字セット(%[])は規定に違反し、予知できない結果をもたらす可能性があります.%[^]も規定違反です.
%[a-z]は、a-z間の文字列を読み込み、それ以前に停止しない場合は、次のようにします.
char s[ ]="hello,my friend"; // a-z
scanf(s,"%[ a-z]",string); //string=hello
%[^a-z]はa-z間でない文字列を読み込み、a-z間の文字に触れると停止します.
char s[ ]="HELLOkitty"; // : a-z
sscanf(s,"%[^a-z]",string); //string=HELLO
%*[^=]前の*番号は変数を保存しないことを示します.条件を満たす文字列をスキップします.
char s[ ]="note pad=1.0.0.1001";
char szfilename[32]=" ";
int i=sscanf(s,"%*[^=]",szfilename); //szfilename=NULL,
int j=sscanf(s,“%[^=]=%s",szfilename); //szfilename=1.0.0.1001
%40 c 40文字を読み込む
%[^=]文字列が"="にぶつかるまで読み取り、"^"の後ろには次のような文字を追加できます.
char s[ ]="note pad=1.0.0.1001";
char szfilename [32]=" ";
int i=sscanf(s,"%[^=]",szfilename); //szfilename=note pad
パラメータフォーマットが%[^=:]の場合、note pad:1.0.0.1001からnote padを読み込むこともできます.