當用作printf
中的格式說明符時,%d
和%i
之間有什麼區別?格式化IO函數(* printf/* scanf)中的轉換說明符%i和%d之間有什麼區別
155
A
回答
216
它們在用於輸出時是相同的,例如,與printf
。
但是,當用作輸入說明符時,這些是不同的。與scanf
,其中%d
掃描一個整數作爲帶符號的十進制數,但%i
默認爲十進制,但也允許十六進制(如果前面有0x
)和八進制(如果前面跟着0
)。
因此033
將27與%i
但33與%d
。
9
這些詞中沒有任何 - 這兩個詞是同義詞。
+0
在接受的答案中提到,在scanf()格式的字符串中使用時有區別。 –
62
這些對於printf
是相同的,但對於scanf
是不同的。對於printf
,%d
和%i
均指定一個帶符號的十進制整數。對於scanf
,%d
和%i
也表示有符號整數,但%i
將輸入解釋爲十六進制數字,前面爲0x
,而八進制爲前面的0
,否則將輸入解釋爲十進制。
14
對於printf
,%i
和%d
格式說明符之間沒有區別。我們可以通過轉到draft C99 standard部分7.19.6.1
fprintf函數又包括printf
關於格式說明看到這一點,它在一段說:
轉換標識符和它們的含義如下:
,幷包括以下子彈:
d,i The int argument is converted to signed decimal in the style [−]dddd. The precision specifies the minimum number of digits to appear; if the value being converted can be represented in fewer digits, it is expanded with leading zeros. The default precision is 1. The result of converting a zero value with a precision of zero is no characters.
另一方面,對於scanf
有差異,%d
假定基數爲10,而%i
自動檢測基數。我們可以通過將部分7.19.6.2
fscanf函數覆蓋scanf
關於格式說明看到這個,在第它說:
轉換標識符和它們的含義如下:
並且包括以下:
d Matches an optionally signed decimal integer, whose format is the same as expected for the subject sequence of the strtol function with the value 10 for the base argument. The corresponding argument shall be a pointer to signed integer. i Matches an optionally signed integer, whose format is the same as expected for the subject sequence of the strtol function with the value 0 for the base argument. The corresponding argument shall be a pointer to signed integer.
相關問題
- 1. printf(「%d」,i ++)和i ++之間有什麼區別;的printf( 「%d」,i)的?
- 2. C中的%i,%d和%D有什麼區別? (printf)
- 3. 作爲scanf的格式說明符,%* c%c和%c之間有什麼區別?
- 4. %s和%c格式說明符之間有什麼區別?
- 5. Java:格式說明符%x和%h之間有什麼區別?
- 6. scanf(「%d」,* p)和scanf(「%d」,p)有什麼區別?
- 7. 解釋scanf中沒有空格和scanf中空白之間有什麼區別?
- 8. getch()和scanf()函數之間的區別
- 9. Python字符串格式化中%s和%d有什麼區別?
- 10. %ul和%lu C格式說明符有什麼區別?
- 11. 什麼的printf( 「%I」)和printf( 「%d」)
- 12. i-vector和d-vector之間的區別
- 13. 什麼是scanf(「%* s」)和scanf(「%* d」)格式標識符?
- 14. 說明鑄造和轉換 - 簡單的詞有什麼區別
- 15. 格式說明符之後的scanf空格與格式說明符之前的空格(「%c」vs「%c」)
- 16. 是什麼的printf( 「\%d」,&t);和printf( 「%d」,T)之間的差;
- 17. 訪問修飾符和訪問說明符之間有什麼區別
- 18. C中限定符和說明符之間的區別是什麼?
- 19. Typedefs和printf格式說明符
- 20. printf的格式說明符中的'F'是什麼意思?
- 21. fork()和〜fork()之間有什麼區別
- 22. 「%。* s」是什麼意思作爲printf中的格式說明符?
- 23. scanf說明符「n」是什麼數字?
- 24. 爲什麼printf(「%d%d%d」,++ i,i,i ++)是未定義的行爲?
- 25. C 「%d」 格式說明
- 26. 很少有新手的問題,與scanf函數和轉換說明問題
- 27. 爲什麼我應該用「%d」代替「%i」作爲C中整數的轉換說明符?
- 28. * x = i和x =&i之間的區別是什麼
- 29. 不同格式說明符的scanf函數的不同行爲
- 30. 中有什麼函數參數和參數之間......區別
在sscanf中期待一個int可能的零填充在我看來是最合理的默認行爲。如果你不期待Octal,那可能會導致微妙的錯誤。所以這表明當你必須任意選擇一個時,%d是一個很好的說明符,除非你明確地想要讀八進制和/或十六進制。 – Eliot