Qual é a diferença entre %d
e %i
quando usado como especificadores de formato printf
?
202
Eles são os mesmos quando usados para saída, por exemplo, com printf
.
No entanto, elas são diferentes quando usadas como especificador de entrada, por exemplo scanf
, with , onde %d
varre um número inteiro como um número decimal assinado, mas o %i
padrão é decimal, mas também permite hexadecimal (se precedido por 0x
) e octal (se precedido por 0
).
Então 033
seria 27 com %i
mas 33 com %d
.
printf
escanf
.Estes são idênticos para,
printf
mas diferentes parascanf
. Paraprintf
, ambos%d
e%i
designe um número inteiro decimal assinado. Porscanf
,%d
e%i
também significa um inteiro assinado mas%i
inteprets a entrada como um número hexadecimal se precedido por0x
e octal se precedido por0
e de outra forma como interpreta a entrada decimal.fonte
Não há diferença entre os especificadores
%i
e%d
formato paraprintf
. Podemos ver isso indo para a seção preliminar do padrão C997.19.6.1
A função fprintf, que também abrange osprintf
especificadores de formato e diz no parágrafo 8 :e inclui o seguinte marcador:
Por outro lado, pois
scanf
há uma diferença,%d
assuma a base 10 enquanto%i
a detecção automática é feita. Podemos ver isso indo para a seção7.19.6.2
A função fscanf, que abordascanf
em relação ao especificador de formato, no parágrafo 12 diz:e inclui o seguinte:
fonte
Não há nenhum
printf
- os dois são sinônimos.fonte
scanf()
string de formato, como diz a resposta aceita.