海外旅行から帰ってきたら、まず何を食べる?

p1,p2に『goo 1234』を代入する時
sscanf(buf, "%s %d", p1, p2);をつかいますが
この時gooと1234の間が一文字分しか開いてはいけないとありました。
もしそれ以上スペースではなした場合
『goo 1234』見たいな感じはどうしたらいいのでしょうか?

A 回答 (2件)

連続するスペース(タブ、改行も)は読み飛ばされるからそのままでいい。

    • good
    • 0

離してもかまいません。


scanf()族の入力書式文字列(上の例の "%s %d" )に空白が表れた場合、
読みとり文字列中の連続した空白を読み飛ばします。

だから "%s %d" では、
"goo 1234"も、
"goo (←複数の空白類文字→) 1234"も、
同様に読みとります。
(実験してみてください)

また、書式文字列中の空白類文字は、複数並べても一個の時と同様に見られます。
なお、ここで言う「空白類文字」は、半角空白だけではなくタブや改行も入ります。

要するに、scanf()族での空白の処理は、
いくつか並んでいても一個の時と同じようになります。
とすると今度は、空白の数の違いはどう読みとるかという話になりますが…まあ方法はあります。

「一文字分しか開いてはいけない」という資料の真意はわかりませんが、
おそらく、「書式文字列の中で何文字も空白を重ねても意味がない」ということを
言いたかったのではないかと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!