QUAL A DIFERENÇA ENTRE %I E %D EM C? - GiBastosSisDev/microtchepoa GitHub Wiki
Estudando C, me surgiu algumas dúvidas. Quando usar as funções de output %i% ou %d%. Identifiquei na web uma resposta que esclareceu a dúvida e foi possível entender e compilar o programa com código de teste qualquer para testar também as funções printf e scanf e chamei meu programa de "mario". Não tem relação com nenhum outro conteúdo (é um auto aprendizado espontâneo, mas pode servir de orientação para outras pessoas que estão estudando C também).
Abaixo a orientação mais sensata que encontrei na web. Fonte/créditos deste conteúdo:https://dealunoparaaluno.wordpress.com/2013/04/23/qual-a-diferenca-entre-i-e-d-em-c/
Antes de falarmos sobre a diferença entre %i e %d precisamos primeiro discutir sobre números octavos, decimais e hexadecimais.
Em matemática é possível exprimir um mesmo número em bases diferentes ou sistema numéricos diferentes. Esse assunto pode se extender um pouco e é mais relacionado à matemática, então vou deixar esse link da wikipedia caso você queira se aprofundar no assunto.
Em C, números octavos são identificados pelo número zero antes dos de mais dígitos. Por exemplo: 01750(octal) representa o número 1000(decimal).
Números hexadecimais são identificados por 0x(zero e x) antes dos de mais dígitos. Por exemplo: 0x3E8(hexadecimal) representa o número 1000(decimal).
Agora que você já sabe que é possível escrever o mesmo número em bases diferentes vamos prosseguir.
Utilizar %i ou %d em funções de output, por exemplo printf(), é a mesma coisa. Normalmente eu utilizo %i simplesmente porquê aprendi dessa maneira e virou uma habitude. Isso não quer dizer que utilizar %d seja errado.
Isso quer dizer que:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 int a = 1000; // número 1000 escrito na base de 10(decimal)
int b = 01750; //número 1000 escrito na base de 8(octal)
int c = 0x3E8; //número 1000 escrito na base de 16(hexadecimal)
//Utilizar %i ou %d para output, não tem diferença
printf("%i\n", a);
printf("%i\n", b);
printf("%i\n", c);
printf("\n");
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", c); São exatamente a mesma coisa.
Mas o mesmo não acontece tratando-se de funções de input, por exemplo scanf().
Utilizar %d implica que o valor digitado pelo usuário será interpretado como um número inteiro decimal.
1 2 3 int a;
scanf("%d", &a) Valor fornecido pelo usuário será necessariamente interpretado como inteiro decimal.
Utilizar %i permite o usuário informar valores na base de 8, 10 e 16.
1 2 3 int a;
scanf("%i", &a) Permite o usuário informar números inteiros no formato decimal, por exemplo: 1000
Informar números inteiros no formato octal, por exemplo: 01750
Informar números inteiros no formato hexadecimal, por exemplo: 0x3E8
Acho que isso cobre tudo. Espero que esse artigo tenha te ajudado e até a próxima.