だから私はこのコードに出くわしました、そして私はそれの目的が何であるか、またはそれがどのように機能するかを理解することができませんでした:
int Word_count;
scanf("%d%*c", &Word_count);
私が最初に考えたのは、%*d
がchar
ポインターを参照しているか、Word_count
がchar
変数を取得できないようにしているということでした。
誰かがこれに光を当ててくれませんか?
*c
は、文字が読み取られるが割り当てられないことを意味します。たとえば、入力「30a」の場合、Word_count
に30が割り当てられますが、「a」は無視されます。
*
in "%*c"
を意味する assignment-suppressing character *
:このオプションが存在する場合、関数は変換の結果を受信引数に割り当てません。1 したがって、文字は読み取られますが、変数には割り当てられません。
脚注:
1. fscanf
C11
標準を引用するには、§7.21.6.2章、fscanf()
[...]各変換仕様は、文字
%
によって導入されます。 %の後に、次のように順番に表示されます。—オプションの代入抑制文字
*
。
— [...]
—変換指定子文字
行動に関しては、
[..]割り当ての抑制が
*
で示されていない限り、変換の結果は、変換結果をまだ受け取っていないformat引数に続く最初の引数が指すオブジェクトに配置されます。 [...]
つまり、"%*c"
のようなフォーマット指定子の場合、char
はstdin
から読み取られますが、スキャンされた値は保存されず、何にも割り当てられません。したがって、対応するパラメーターを指定する必要はありません。
したがって、この場合、
scanf("%d%*c", &Word_count);
完全に有効ステートメントです。
たとえば、* nix環境で行うことは、を押したために保存されたnewline
から入力バッファをクリアすることです。 ENTER 入力後のキー。