2011-09-30 124 views
9

在C中,使用帶參數的scanf()scanf("%d %*d", &a, &b)的行爲有所不同。它只爲一個變量輸入值而不是兩個!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

星號(*)表示將讀取格式的值,但不會寫入變量。 scanf不希望此值的參數列表中包含變量指針。你應該寫:

scanf("%d %*d",&a); 
+0

有沒有辦法在我們想用'fscanf'讀取的字符之後忽略所有字符?即直到行結束時忽略所有事情?我一直在尋找那個相當長的一段時間。 – Bionix1441

+0

@ Bionix1441'scanf'只讀取'stdin'(和'fscanf'文件中的字符)以滿足格式字符串的需要。如果您的變量中出現不正確的值,則表示您遇到與該格式匹配的錯誤。檢查返回值。如果它沒有幫助,我想你需要用例子發佈一個適當的問題。 –