-1

のフォーマット指定子で使用されるオプションは知っていますが、以下のコードのように、printf()like が何を意味するのかについてはまったくわかりません。%3d

scanf("%3d %3d",&num1,&num2);

一般的に言うと、scanf ステートメントでと の間%の数字は何を示していますか。format specifier

scanf()入力を受け取り、引数で指定されたアドレスに格納するだけではありませんか?

4

1 に答える 1

14

詳細なドキュメントを参照する必要があります。

基本的に、%と変換指定子の間の数字は最大フィールド幅を示します。指定された文字数が処理されると、変換は停止します。

これは、次のように、一連の数字を複数の個別の数字に「分割」するのに便利です。

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、ファイルから読み取ったデータ、プログラムの他の場所でオンザフライで作成したデータ、ネットワーク経由で受信したデータ、またはその他の方法で呼び出すことができます。

于 2013-04-26T07:54:48.990 に答える