• ベストアンサー

%*cって?

独習C++のp152ページで出てきました。 ・・・date::date ( char *str ) { sscanf ( str , "%d%*c%d%*c%d" , &month , &day , &year) ; } int main(){ date sdate ( "12/31/99" ) ; ・・・} 略しましたがこんな風に記述されています。クラスはdateです。最初の%dが&monthに相当してってのは分かるんですが、じゃあ%*cってどれに相当するのでしょうか?そもそも%*cってのがわかりません。 ご教授よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

「*」はスキャンするときにスキップする、と考えてください。引数は取りません。 「c」は文字(1文字)だから1文字スキップ。 %d --> &month %*c --> %d の後ろの1文字をスキップ(A) %d --> &day %*c --> %d の後ろの1文字をスキップ(B) %d --> &year sdate("12/31/99") であれば、数字 "12" と "31" の間の '/' を(A)の %*c でスキップするということです。 文字を特定していないのだから、sdate("12-31-99") でもOKということです。 sscanf をもし、 sscanf ( str , "%d/%d/%d" , &month , &day , &year) ; と書いたら、sdate("12/31/99") はOKだけど、sdate("12-31-99") はNGですよね?

tkdtoto7
質問者

お礼

みなさんご回答ありがとうございました。 巻末で確認したところscanfに記載されていました。 巻末は飛ばしていたので気がつきませんでした。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

sscanf の仕様は確認しましたか? * で「読み取るけど代入しない」って意味. C++ じゃなくって C の範囲.

関連するQ&A