のフォーマット指定子で使用されるオプションは知っていますが、以下のコードのように、printf()
like が何を意味するのかについてはまったくわかりません。%3d
scanf("%3d %3d",&num1,&num2);
一般的に言うと、scanf ステートメントでと の間%
の数字は何を示していますか。format specifier
scanf()
入力を受け取り、引数で指定されたアドレスに格納するだけではありませんか?
詳細なドキュメントを参照する必要があります。
基本的に、%
と変換指定子の間の数字は最大フィールド幅を示します。指定された文字数が処理されると、変換は停止します。
これは、次のように、一連の数字を複数の個別の数字に「分割」するのに便利です。
const char *date = "20130426";
int year, month, day;
if(sscanf(date, "%4d %2d %2d", &year, &month, &day) == 3)
print("the date is %4d-%02d-%02d\n", year, month, day);
フォーマット文字列内の空白は、入力内の空白の任意のシーケンス ( noneを含む) と一致することに注意してください。したがって、入力文字列 ( date
) に空白が含まれていなくても、上記は機能します。フォーマット文字列に空白を使用すると、読みやすくなります。
stdin
あなたのコメントに応えて、sscanf()
関数はそれが操作する文字列がどこから来たのかを知りません(または気にしません)。それは単なる文字列です。そうですstdin
、ファイルから読み取ったデータ、プログラムの他の場所でオンザフライで作成したデータ、ネットワーク経由で受信したデータ、またはその他の方法で呼び出すことができます。