0

C プログラミング言語では、プレースホルダー "%n" は何ですか?? そして、次のコードはどのように機能しますか?

    char s[150];
    gets(s);
    int read, cur = 0,x;
    while(sscanf(s+cur, "%d%n", &x, &read) == 1)
    {
        cur+= read;
        /// do sth with x
    }

-- このコードは行を文字配列として取得し、この文字配列から数字をスキャンし*s="12 34 567" ますx = 12x = 34x = 567

4

3 に答える 3

0

%nすでに処理された入力文字列の文字数を関連パラメータに格納します。この場合read、この値を取得します。コードの実行時に各変数に何が起こるかをダンプするために、コードを少し書き直しました。

#include <stdio.h>

int main(int argc, char **argv)
  {
  char *s = "12 34 567";
  int read=-1, cur = 0, x = -1, call=1;

  printf("Before first call, s='%s'  cur=%d   x=%d   read=%d\n", s, cur, x, read);

  while(sscanf(s+cur, "%d%n", &x, &read) == 1)
    {
    cur += read;

    printf("After call %d, s='%s'  cur=%d   x=%d   read=%d\n", call, s, cur, x, read);

    call += 1;
    }
  }

以下を生成します

Before first call, s='12 34 567'  cur=0   x=-1   read=-1
After call 1,      s='12 34 567'  cur=2   x=12   read=2
After call 2,      s='12 34 567'  cur=5   x=34   read=3
After call 3,      s='12 34 567'  cur=9   x=567  read=4 

共有してお楽しみください。

于 2013-05-17T13:22:26.540 に答える