どうもありがとです(^^
>> scanf(%*[0-9]s,str);
> 正解は、標準入力から、例えば09365fffとうったら、
> 先頭の数字がとばされて、fffと画面に出力されるでした。
出力なんかされません。
はじめまして、レナです。
scanf(%*[0-9]s, str)は、
スキャン集合体で、[]の中を読み、*の効果で読み飛ばすのです。
だから、09365fffと打てば、
fffが出力されるのです。
独習Cにもきちんと乗ってますよ?
スキャン集合体と、*の使い方は、中級者の話ですけど・・・
フレアさんの言ってるとおり、char str[80]があらかじめ宣言されているのが前提ですけど
出力なんかされません!
あ、printf()で出力はしますよ(^^
でも、フレアさんの書いてるscanfの読み取りはきちんとできてます。
私も試しました。
フレアさんに補足すると、printfをつければ、fffと出力するです。
> scanf(%*[0-9]s, str)は、
> スキャン集合体で、[]の中を読み、*の効果で読み飛ばすのです。
> だから、09365fffと打てば、
>
> fffが出力されるのです。
%*[0-9]%sならそうですが、sの前に%がないのでstrには何も書き込まれませんね。
一文字以上の0..9と、続くs一文字を読み飛ばすのみです。
scanf(%*[0-9]s,str)で、09365fffとすれば、strにはfffとなってますよ。
なぜなら、*[0-9]sでひとつのフォーマット書式だからです。
*[0-9]で先頭の数字を抑制し、sがあるので、格納してるのです。
またタイプミスしてるし…無駄に他人を挑発してないで有意義な事をしましょうよ
…。
スキャン集合体は知らなかったので試したみたけど…
>なぜなら、*[0-9]sでひとつのフォーマット書式だからです。
>*[0-9]で先頭の数字を抑制し、sがあるので、格納してるのです。
…されなかった。
というか「*[0-9]」「s」で二つなのか「*[0-9]s」で一つなのかどっちだと言ってるん
ですか。
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804
for 80x86
Microsoft (R) Incremental Linker Version 6.00.8447
(VC6)
ソース:
#include <stdio.h>
int main(int,char**){
char buf[80];
sscanf(09365fff,%*[0-9]s,buf);
printf('%s'\n,buf);
sscanf(09365fff,%*[0-9]%s,buf);
printf('%s',buf);
return 0;
}
実行結果:
''
'fff'
ここは「VC++ラウンジ」で「VC++,C/C++の質問掲示板です。」
こういう返信も「使用上の注意」に違反しているとは思いますが、間違っている、
もしくは正しく動くとは限らない話をそのまま置いておいても誤解を招きかねないと
思うので…。
スマソ・・・