2017-03-31 205 views
-7
#include <stdio.h>  

int main() { 
    int days = scanf("%d", &days); 
    printf("%d", days); 
    return 0; 
} 

無論結果如何,結果都是1。爲什麼scanf總是返回1?

7 
1 

我已經使用scanf很多次了,從來沒有遇到過這種情況。這裏的交易是什麼?

+5

你剛剛從'scanf'功能**返回碼**重挫days'的'值。 – t0mm13b

+1

'scanf'的文檔不清楚嗎? – Olaf

+4

確實要閱讀手冊頁的時間? –

回答

3

這是正確的,因爲scanf()返回成功匹配和轉換元素的數量。考慮你的情況正確的輸入,您的每一次輸入經過轉換,所以你能看到值1

注意點,scanf()不返回掃描的價值本身,它存儲在傳遞的值論據。

引用C11,章§7.21.6.4

[...]的scanf函數返回 號碼輸入項目的分配,其可以是少於規定的,或甚至零,在該 早期匹配失敗的事件。

+0

謝謝。字符數限制 – user3643077

+2

@ user3643077:您必須在其他地方以不同的方式執行此操作。 –

0

scanf的返回類型是指示它是否成功讀取一個整數。

這將做你期待什麼

#include <stdio.h>  

int main() { 
    int days = 0; 
    scanf("%d", &days); 
    printf("%d", days); 
    return 0; 
} 
+0

這並不意味着你應該忽略它。 –

+0

謝謝。 char limit – user3643077

+0

@WeatherVane同意,但這是一個非常簡單的程序。我只是試圖說明OP所問的行爲。 –