9

このプログラムを Turbo C で実行しようとしましたが、出力を解読できませんでした。これは%*cどういう意味ですか?どんな助けでも大歓迎です。

int dd,mm,yy;
printf("\n\tEnter day,month and year");
scanf("%d %*c %d %*c %d",&dd,&mm,&yy);  // what does %*c mean ?
printf("\n\tThe date is : %d %d %d",dd,mm,yy);

出力

Enter day, month and year 23
2
1991
3
5
The date is: 23 1991 5
4

4 に答える 4

11

*in a format は、 「scanf()データを読み取りますが、引数リストの変数に割り当てない」ことを意味します。コンテキストでは、次のように入力できることを意味します。

18/07/2012

日 (18)、月 (7)、年 (2012) が正しく解釈されます。フォーマット文字列のスペースは重要であり、物事を複雑にします。通常、%c次の文字 (スペースも含む) を読み取りますが、変換指定子の前後のスペースは空白を%*c処理するため、コードは空白以外の文字を使用する必要があります。

したがって、入力したときに観察された動作は次のとおりです。

23 2 1991 3 5

2 (それ自体) は最初のものによって消費され%*c、3 (それ自体) は 2 番目のものによって消費されました。

これは標準 C であり、Turbo C の固有の機能ではありません (質問の初版で指定されていますが、最初にこの回答を書いて以来、Turbo C への参照を削除するために質問が編集されています)。

于 2012-07-18T13:02:56.983 に答える
5

フォーマット文字列の*after%は、フォーマットに一致する入力が無視されることを示します (したがって、使用しない一致した値を格納するために変数へのポインターを渡す必要はありません)。

于 2012-07-18T13:03:38.997 に答える
3

/日付表記でよくあるスペース、 、a などの次の文字を無視することを意味し-ます。

于 2012-07-18T13:03:48.860 に答える
1

代入を抑制して使用*します。scanf後続の変換の結果は破棄されます。

于 2012-07-18T13:14:14.473 に答える