2015-09-06 68 views
-3
scanf("%d %d"+2, &a, &b); 
printf("%d\n%d", a, b); 

它接受僅a並打印a0
任何人都可以解釋爲什麼會發生這種情況嗎? 此外,如果我寫+1而不是+2,它將不接受任何內容並打印00變化在scanf C語言

回答

3

此:

scanf("%d %d"+2,&a,&b); 

相同

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

其是相同

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

這意味着額外&b參數是不必要的。

這裏發生的是"%d %d"char*。向它添加兩個結果會生成一個指向前面兩個字節的指針,這意味着它現在指向" %d"。前導空格是不必要的,因爲%d已經跳過了前導空格字符。


當使用+1代替+2,所述scanf相同

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

這意味着它預計在輸入後接一個整數一個d要分配給a。由於您在輸入中提供了一個數字而不是d,因此scanf將失敗並返回0.因此,不會接受任何內容,並且執行到達printf,該值將打印ab的值。