2017-06-03 69 views

回答

2

scanf完成之後用&a和做其工作,scanf返回值被分配到a可以是3如果輸入三個空格分隔整數號開始。

返回值是成功匹配和分配的輸入項目的數量。

0

你正在服用3個項目作爲輸入,即使你是從scanf函數收集所有投入的,最後它要保持scanf函數的返回值,這是項目的數量成功讀取

在你3個項目已成功閱讀,因此持有3

2

您應該閱讀scanf()的手冊。

返回值

這些函數返回成功匹配,並分配輸入項目,其可爲少於規定的,或甚至零在早期匹配失敗的情況下的數量。

如果在第一次成功轉換或發生匹配失敗之前達到輸入的結尾,則會返回值EOF。如果發生讀取錯誤,EOF也會返回,在這種情況下,流的錯誤指示符(請參閱ferror(3))已設置,並且設置errno表示錯誤。

所以像你想的是scanf()解析3 long int,它可以返回EOF0123

順便說一句,scanf()的回報類型是int,而不是long int

#include <stdio.h> 

int main(void) 
{ 
    long int al, bl, cl; 
    int ret = scanf("%ld %ld %ld", &al, &bl, &cl); 
    printf("ret = %d:", ret); 
    if (ret == 3) { 
     printf(" al = %ld, bl = %ld, cl = %ld\n", al, bl, cl); 
    } 
} 
0

是的@Pras是正確的。由於您(顯然)成功從輸入讀取三個值,因此scanf的返回值爲三。但是它是很不好的編程習慣在同一個語句中多次使用同一個變量的值。在本例中,您將「a」的值設置爲四個次,其中三次來自輸入的掃描結果,第四次作爲返回值的賦值。如果您沒有指定a作爲調用的返回值,則「a」的值將是不可預知的,因爲處理參數的順序與實現相關。如果你輸入「11 22 33」,「a」可能是11或33 ...甚至22,這取決於你的編譯器如何處理scanf。

相關問題