ショッピングモール  CDラジカセ  CDラジオ  ラジカセ  ラジオ  テープレコーダー  ポータブルMD


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.3296

sscanf関数
投稿者---Misae(2005/01/13 20:02:10)


sscanfで変数nameに Takako Watanabe まで取り込みたいのですが、
Takakoまでしか取り込まれません。
どのようにしたら良いのでしょうか?

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[])
{
  int age,res;
  char name[126];
  char *hoge="33 Nancy Watanabe";
  
  res=sscanf(hoge,"%d %s",&age,name);

  printf("%d\n",age);
  printf("%s\n",name);
  printf("%d\n",res);

  return 0;
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:sscanf関数 3297 NykR 2005/01/13 21:03:53
<子記事> Re:sscanf関数 3298 BB 2005/01/14 02:07:51


No.3297

Re:sscanf関数
投稿者---NykR(2005/01/13 21:03:53)


> sscanfで変数nameに Takako Watanabe まで取り込みたいのですが、
> Takakoまでしか取り込まれません。
> どのようにしたら良いのでしょうか?

  :
  char name[126] = "";
  :
  char format[128];
  int len;

  sscanf(hoge, "%*d%n", &len);
  sprintf(format, "%%d %%%dc", strlen(hoge) - len);
  res=sscanf(hoge, format, &age, name);
  :



この投稿にコメントする

削除パスワード

No.3298

Re:sscanf関数
投稿者---BB(2005/01/14 02:07:51)


res=sscanf(hoge,"%d %[^,]",&age,name);
こんな手もあります。

#ただし、名前の中に","(コンマ)が入ってないと仮定してですが。。


この投稿にコメントする

削除パスワード

No.3317

Re:sscanf関数
投稿者---Misae(2005/01/18 14:34:58)


NykR様、BB様、返事が大変遅れてすいません
たいへんありがとうございました。

見事にうまくいきました。


2つの示されたコードからいろいろ調べてみると、
書式指定子と呼ばれるものみたいです。

NykR様の書かれた部分で

sscanf(hoge,"%*d%n",&len);

変数lenには、先頭の数字から数字の終わりまでの文字数になるようです。

* は代入抑止を意味する。
%*d は整数型を読み捨てる
%n は今まで走査されたバイト総数 (空白を含む) を格納する(対応する引数は整数型へのポイン

タ&len)
よって、
%*d%n は結果として読み捨てた数字の個数になる


sprintf(format,"%%d %%%dc",strlen(hoge)-len);

%%d は、%dを無効にして文字列の %d にする

%%%dc の %% は、文字の % にする

%dで hogeの文字数から数字より以降の文字列の文字数にする(%13c)

結果として目的とする書式 "%d %13c" を変数formatにつくる。


BB様の書かれた
res=sscanf(hoge,"%d %[^,]",&age,name);
の %[^,] は、カンマが無い限り変数nameに読み込む

と、以上のように理解しました。間違っていたら、指摘くださればありがたいです。



この投稿にコメントする

削除パスワード

No.3318

Re:sscanf関数
投稿者---nop(2005/01/18 16:16:12)


>%%d は、%dを無効にして文字列の %d にする

これはちょっと違うかな。

 まず、「%%」で文字の「%」を得ます。
 次の「d」はそのまま出力される。

と言う感じです。

>%%%dc の %% は、文字の % にする

と同じ動作ですな。



この投稿にコメントする

削除パスワード

No.3319

Re:sscanf関数
投稿者---Misae(2005/01/19 14:24:16)


>>%%d は、%dを無効にして文字列の %d にする
>
>これはちょっと違うかな。
>
> まず、「%%」で文字の「%」を得ます。
> 次の「d」はそのまま出力される。
>
>と言う感じです。
>
>>%%%dc の %% は、文字の % にする
>
>と同じ動作ですな。

その通りでした。

もっと細かく厳密に見ていかないといけないなと思いました。
ありがとうございます。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity