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).

marioteste

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.