私は通常、 で文字を取得し%c
ますが、 を使用するコードを見たことがあります%*c%c
。例えば:
char a;
scanf("%*c%c", &a);
違いはなんですか?
私は通常、 で文字を取得し%c
ますが、 を使用するコードを見たことがあります%*c%c
。例えば:
char a;
scanf("%*c%c", &a);
違いはなんですか?
scanf
フォーマット文字列では、 の後の文字%
は*
代入抑制文字です。
あなたの例では、最初の文字を食べますが、保存しません。
たとえば、次のようにします。
char a;
scanf("%c", &a);
xyz\n
, (\n
は改行文字) を入力x
すると、 object に格納されますa
。
と:
scanf("%*c%c", &a);
と入力するとxyz\n
、y
object に格納されますa
。
C は、このように*
for を指定すると言います:scanf
(C99, 7.19.6.2p10) 割り当ての抑制が * で示されていなければ、変換の結果は、まだ変換結果を受け取っていない format 引数に続く最初の引数が指すオブジェクトに配置されます。
ウィキペディアによると:
パーセント記号の直後のオプションのアスタリスク (*) は、この書式指定子によって読み取られたデータが変数に格納されないことを示します。この削除された変数には、フォーマット文字列の後ろに引数を含めないでください。
そのアスタリスクに一致する文字をスキップできるようにするためです。
基本的に%cは文字型指定子を指し、*% cは 1 文字を除外するために使用され、その文字はコンソールから読み取られますが、変数には割り当てられません。たとえば。-:
入力が 31/12/2018 で、整数のみの形式で出力し、「/」文字を除外したい場合、ここで %*c を次のように使用できます - scanf("%d%*c%d%* c%d" , &日,&月,&年);
このようにして、2 つの「/」文字を除外します。
同様に、%*dは 1 つの整数を除外するために使用され、 %*fは 1 つの float を除外するために使用され、%*sは文字列の 1 つの単語を除外するために使用されます。それが役に立ったことを願っています:)