Qual è la differenza tra gli indicatori di conversione% ie% d nelle funzioni formattati IO (* printf / scanf *)

StackOverflow https://stackoverflow.com/questions/1893490

Domanda

Qual è la differenza tra %d e %i quando viene utilizzato come identificatori di formato in printf?

È stato utile?

Soluzione

Sono lo stesso quando usato per l'uscita, per esempio con printf.

Tuttavia, questi sono diverse quando utilizzati come specificatore esempio con scanf, dove %d analizza un intero come un numero decimale firmato, ma di default %i a decimale, ma permette anche esadecimale (se preceduto da 0x) e ottale (se preceduto da 0).

Quindi 033 sarebbe 27 con %i ma 33 con %d.

Altri suggerimenti

Questi sono identici per printf ma diversi per scanf. Per printf, sia %d e %i designano un intero decimale firmata. 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 %i e format %d specificazioni per printf. Possiamo vedere questo andando al C99 standard 7.19.6.1 sezione La funzione fprintf che copre anche printf rispetto alle identificatori di formato e si dice nel paragrafo 8 :

  

Gli indicatori di conversione e il loro significato sono:

e include il seguente 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 base 10 mentre auto %i rileva la base. Possiamo vedere questo andando alla sezione 7.19.6.2 La funzione fscanf che copre scanf rispetto al di formato, al punto 12 che 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.

Non c'è alcuna in printf - i due sono sinonimi

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top