C言語です – 固定ページ 2 – プログラミング – Home

通知
すべてクリア

[解決済] C言語です

固定ページ 2 / 2

フレア
 フレア
(@フレア)
ゲスト
結合: 17年前
投稿: 9
Topic starter  

どうもありがとです(^^


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

>> scanf(%*[0-9]s,str);
> 正解は、標準入力から、例えば09365fffとうったら、
> 先頭の数字がとばされて、fffと画面に出力されるでした。

出力なんかされません。


返信引用
レナ
 レナ
(@レナ)
ゲスト
結合: 17年前
投稿: 4
 

 はじめまして、レナです。

scanf(%*[0-9]s, str)は、
 スキャン集合体で、[]の中を読み、*の効果で読み飛ばすのです。
だから、09365fffと打てば、

fffが出力されるのです。

独習Cにもきちんと乗ってますよ?

スキャン集合体と、*の使い方は、中級者の話ですけど・・・

フレアさんの言ってるとおり、char str[80]があらかじめ宣言されているのが前提ですけど


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

出力なんかされません!


返信引用
レナ
 レナ
(@レナ)
ゲスト
結合: 17年前
投稿: 4
 

 あ、printf()で出力はしますよ(^^

でも、フレアさんの書いてるscanfの読み取りはきちんとできてます。

私も試しました。

フレアさんに補足すると、printfをつければ、fffと出力するです。


返信引用
yoh2
 yoh2
(@yoh2)
ゲスト
結合: 18年前
投稿: 70
 

> scanf(%*[0-9]s, str)は、
>  スキャン集合体で、[]の中を読み、*の効果で読み飛ばすのです。
> だから、09365fffと打てば、
>
> fffが出力されるのです。

%*[0-9]%sならそうですが、sの前に%がないのでstrには何も書き込まれませんね。
一文字以上の0..9と、続くs一文字を読み飛ばすのみです。


返信引用
奈良っち
 奈良っち
(@奈良っち)
ゲスト
結合: 17年前
投稿: 3
 

 scanf(%*[0-9]s,str)で、09365fffとすれば、strにはfffとなってますよ。

なぜなら、*[0-9]sでひとつのフォーマット書式だからです。

*[0-9]で先頭の数字を抑制し、sがあるので、格納してるのです。


返信引用
麩
 麩
(@麩)
ゲスト
結合: 17年前
投稿: 95
 

またタイプミスしてるし…無駄に他人を挑発してないで有意義な事をしましょうよ
…。

スキャン集合体は知らなかったので試したみたけど…
>なぜなら、*[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++の質問掲示板です。」
こういう返信も「使用上の注意」に違反しているとは思いますが、間違っている、
もしくは正しく動くとは限らない話をそのまま置いておいても誤解を招きかねないと
思うので…。


返信引用
奈良っち
 奈良っち
(@奈良っち)
ゲスト
結合: 17年前
投稿: 3
 

 スマソ・・・


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました