Qual è la differenza tra %d
e %i
quando utilizzato come identificatore di formato in printf
?Qual è la differenza tra gli identificatori di conversione% i e% d nelle funzioni di I/O formattate (* printf/* scanf)
risposta
Sono uguali se utilizzati per la produzione, ad es. con printf
.
Tuttavia, questi sono diversi se utilizzati come identificatori di ingresso, ad es. con scanf
, dove %d
esegue la scansione di un numero intero come numero decimale con segno, ma %i
imposta il valore decimale ma consente anche esadecimale (se preceduto da 0x
) e ottale se preceduto da 0
.
Quindi 033
sarebbe 27 con %i
ma 33 con %d
.
Non c'è nessuno in quelle parole - i due sono sinonimi.
C'è una differenza quando usato nella stringa di formato 'scanf()' come dice la risposta accettata. –
Questi sono identici per printf
ma diversi per scanf
. Per printf
, entrambi %d
e %i
indicano un numero decimale con segno. Per scanf
, %d
e %i
significa anche un intero con segno ma %i
inteprets l'ingresso come un numero esadecimale se preceduto da 0x
e ottale se preceduta da 0
e altrimenti interpreta l'input come decimale.
Non v'è alcuna differenza tra i committenti e %i
%d
formato per printf
. Possiamo vedere questo andando al draft C99 standard sezione 7.19.6.1
La funzione fprintf che copre anche printf
rispetto alle identificatori di formato e si dice al punto :
Gli indicatori di conversione e il loro significato sono:
e comprende le seguenti proiettile:
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.
D'altra parte per scanf
c'è una differenza, %d
assumere la base 10 mentre %i
rileva automaticamente la base. Possiamo vedere questo andando alla sezione 7.19.6.2
La funzione fscanf che copre scanf
rispetto al di formato, al punto dice:
Gli indicatori di conversione e il loro significato sono:
e include quanto segue:
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. Qual è la differenza tra printf ("% i") e printf ("% d")
- 2. Qual è la differenza tra% i e% d in Python?
- 3. Qual è la differenza tra const e immutable in D?
- 4. qual è la differenza tra la memoria mappata IO e IO mappato io
- 5. Qual è la differenza tra Task e IO in Scalaz?
- 6. Qual è la differenza tra% d e% * d in linguaggio c?
- 7. Qual è la differenza tra queste funzioni
- 8. Differenza tra scanf() e fgets()
- 9. Qual è la differenza tra queste funzioni?
- 10. Qual è la differenza tra funzioni e chiusure?
- 11. domanda sugli identificatori di formato printf incompatibili
- 12. Posix fornisce macro di stringhe di formato per printf/scanf?
- 13. Qual è la differenza tra le famiglie di funzioni printf e vprintf e quando dovrei usare l'una sull'altra?
- 14. Qual è la differenza tra gli specificatori di formato% ul e% lu C?
- 15. Qual è la differenza tra printf ("% s"), printf ("% ls"), wprintf ("% s") e wprintf ("% ls")?
- 16. Qual è la differenza tra le dipendenze di maven org.apache.commons: commons-io e commons-io: commons-io?
- 17. Qual è la differenza tra le funzioni VarIsEmpty e VarIsEmptyParam
- 18. dplyr: qual è la differenza tra funzioni group_by e group_by_?
- 19. differenza tra funzione (d) e funzione (d, i)?
- 20. Qual è la differenza tra dict() e {}?
- 21. Differenza tra diversi formati scanf
- 22. Qual è la differenza tra ptr [i] e * (ptr + i)?
- 23. Qual è la differenza tra numpy "identificatori di tipo" e "tipi" in Cython?
- 24. Qual è la differenza tra gli eventi "mouseup" e "clic"?
- 25. Qual è la differenza di prestazioni tra HttpModule e Global.aspx?
- 26. Qual è la differenza tra queste due funzioni/approcci?
- 27. Qual è la relazione tra Spring Boot e Spring IO?
- 28. Qual è la differenza tra `##` e `hashCode`?
- 29. Qual è la differenza tra gli eventi Control.Enter e Control.GotFocus?
- 30. printf di una variabile size_t con LLD, LD e tipo D identificatori
L'attesa di un int con possibile riempimento dello zero in sscanf mi sembra il comportamento predefinito più ragionevole.Se non ti aspetti Octal, ciò potrebbe causare bug sottili. Quindi questo suggerisce che% d è un buon specificatore da usare quando devi sceglierne uno arbitrariamente, a meno che tu non voglia esplicitamente leggere ottale e/o esadecimale. – Eliot