ネタ元は次の質問より。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200803/08030005.txt
この質問を読んでscanfのスキャン集合体を詳しく知りたくなりました。
επιστημηさんがMSDNサイトのリンクを載せていますが
どこかに載っているのですか?
http://msdn.microsoft.com/library/ja/vclib/html/_crt_scanf_Type_Field_Character
s.asp
このリンクに [ ] と ^ 文字が使えることが書かれていますが
スキャン集合体で使うのはこの3文字だけですか?
スキャン集合体の記述一覧(例)や使い方が載っているサイトがあれば
教えて下さい。よろしくお願いします。
リンクが正しくなかったので訂正。
http://msdn.microsoft.com/library/ja/default.asp?
url=/library/ja/vclib/html/_crt_format_specification_fields_.2d_.scanf_and_wsca
nf_functions.asp
スキャン集合とは、
scanf(%[],&i); の[]のことです。
例えば、[a]なら、aだけ入力を受け付けるという意味で、
[a-z]なら、aからzまで入力を受け付けるという意味です。
abf758なら、[a]の場合、a以外は読み飛ばし、[a-z]の場合、7のところで読み飛ばします。
[^a-z]は、a-zは入力を受け付けない、すなわち、最初にaがきてるから、すべて読み飛ばしま
す。
ちなみに scanf(%d*%c%d, ) とすると、111-222と入力する場合、-だけ読み飛ばします。
独習C第3版のscanfの節で知りました。
http://msdn2.microsoft.com/ja-jp/library/xdb9w69d.aspx
↑ココの「区切られていない文字列の読み取り」のトコかな。
Wikipediaの記述も結構充実してるようです。
http://ja.wikipedia.org/wiki/Scanf
あとはLinuxとかのmanでも
http://www.pinkdragon.net/doc_lib/contents/ja/linux_man/scanf.3.html
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html
[a-z]などの指定は標準ではないがよく行われる拡張…なのかな。
manでの説明だと集合に特殊な記号を入れる方法も書いてあるので、VCで使
う分にも読む価値はあるかもしれません。
MSDNのscanf、printfの説明ってリンクが半端だったり、どうにも参照し難いんで
すよね…
本筋からそれますが補足
>ちなみに scanf(%d*%c%d, ) とすると、
%d%*c%dでは?
フレアさん、επιστημηさん、麩さん。
書き込みありがとう。
貼ってあるリンクを読み意味とか、使い方は分かりました。
でもどう活用してよいのかが疑問です。
便利そうですが
普段どんな感じで使っていますか?
利用法などを知りたいです。
(分かりやすい例え、活用法があればお願いします)
> 普段どんな感じで使っていますか?
scanf, fscanf の類を使うことがありません。
> scanf, fscanf の類を使うことがありません。
僕もほとんど使ったことがないんです。
普段はfgets使って自分でパースしているから。
もしかしてscanfとかってC言語の教科書にある
簡単な入力ぐらいしか利用価値がないのでしょうか?
scanfってキー入力だから
いつか誰かが間違って入力することがあるからなあ。
簡単な入力でも使わないんじゃない。
> 簡単な入力でも使わないんじゃない。
そうですか。
皆様。
いろいろとありがとうございました。