2011-09-30 6 views
9

Cでは、パラメータがのscanf()を使用すると、動作が異なります。 2つではなく1つの変数の値を入力します。scanf()スキップ変数

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

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

答えて

15

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

引用:

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

実際にファイルに存在しない整数を破棄した場合、fscanfは失敗しないようです。 – Bionix1441

10

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

+0

'fscanf'を使って読みたい文字の後にあるすべての文字を無視する方法はありますか?つまり、行末まではすべて無視しますか?私はかなりの時間それを探していました。 – Bionix1441

+0

@ Bionix1441 'scanf'は、書式文字列を満たすのに必要なだけ、' stdin'(および 'fileから' fscanf')から多くの文字を読み込みます。変数に不正な値が入っている場合は、フォーマットに一致するエラーが発生します。戻り値を確認してください。それが助けにならない場合は、適切な質問を例文とともに投稿する必要があると思います。 –