¿Cuál es la diferencia entre especificadores de conversión% i y% d en funciones IO con formato (* printf / * scanf)

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

Pregunta

¿Cuál es la diferencia entre %d y %i cuando se utiliza como especificadores de formato en printf?

¿Fue útil?

Solución

Ellos son los mismos cuando se utiliza para la salida, por ejemplo, con printf.

Sin embargo, éstos son diferentes cuando se utiliza como entrada de especificador por ejemplo con scanf, donde %d escanea un número entero como un número decimal firmado, pero los valores predeterminados %i a decimal sino que también permite hexadecimal (si precedida por 0x) y octal (si precedido por 0).

Así 033 sería 27 con %i pero con 33 %d.

Otros consejos

Estos son idénticos para printf pero diferente para scanf. Para printf, tanto %d y %i designan un número entero decimal firmado. Para scanf, %d y %i también significa un número entero firmado pero %i inteprets la entrada como un número hexadecimal si precedido por 0x y octal si precedido por 0 y de otra manera interpreta la entrada como decimal.

No hay ninguna diferencia entre los especificadores de formato y %i %d para printf. Podemos ver esto de ir a la proyecto de norma C99 7.19.6.1 sección La función fprintf que también cubre printf con respecto a los especificadores de formato y se dice en el párrafo 8

  

Los especificadores de conversión y sus significados son:

e incluye la siguiente bala:

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.

Por otro lado para scanf hay una diferencia, %d asumir base 10, mientras que %i automático detecta la base. Podemos ver esto de ir a la sección 7.19.6.2 La función fscanf que cubre scanf con respecto al especificador de formato, en el párrafo 12 que dice:

  

Los especificadores de conversión y sus significados son:

e incluye lo siguiente:

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.

No cualquiera está en printf - los dos son sinónimos

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top