web-dev-qa-db-ja.com

scanf()スキップ変数

Cでは、パラメーターとともにscanf()を使用すると、scanf("%d %*d", &a, &b)の動作が異なります。 2つではなく1つの変数の値を入力します!

これを説明してください!

scanf("%d %*d", &a, &b);
18
ross

*は基本的に、指定子が無視されることを意味します(整数は読み取られますが、割り当てられません)。

man scanf からの引用:

 *        Suppresses assignment.  The conversion that follows occurs as
          usual, but no pointer is used; the result of the conversion is
          simply discarded.
24
jpalecek

アスタリスク(*)は、フォーマットの値は読み取られますが、変数には書き込まれないことを意味します。 scanfは、この値のパラメーターリストに変数ポインターを期待していません。あなたは書くべきです:

scanf("%d %*d",&a);
13

http://en.wikipedia.org/wiki/Scanf#Format_string_specifications

パーセント記号の直後のオプションのアスタリスク(*)は、このフォーマット指定子によって読み取られたデータが変数に格納されないことを示します。

2
reader_1000