74 votes

pourquoi% d représente-t-il Integer?

Je sais que cela ne semble pas productif, mais je cherche un moyen de retenir tous les codes de formatage pour les appels printf . %s , %p , %f sont tous évidents, mais je ne peux pas comprendre d'où viennent %d . %i déjà pris par autre chose?

95voto

Brian Campbell Points 101107

Il est synonyme de "virgule" (base 10), pas de "nombre entier." Vous pouvez utiliser %x imprimer en hexadécimal (base 16), et %o imprimer en octal (base 8). Un entier pourrait être dans l'une de ces bases.

En printf(), vous pouvez utiliser %i comme synonyme %d, si vous préférez indiquer "integer" au lieu de "virgule", mais %d est généralement préférable car il est plus spécifique.

À l'entrée, à l'aide de scanf(), vous pouvez utilisez les deux %i et %d . %i des moyens de l'analyser comme un nombre entier dans n'importe quelle base (octal, hexadécimal ou décimal, comme indiqué par un 0 ou 0x préfixe), tandis que l' %d des moyens de l'analyser comme un nombre décimal.

Voici un exemple de chacun d'eux en action:

#include <stdio.h>

int main() {
  int out = 10;
  int in[4];

  printf("%d %i %x %o\n", out, out, out, out);
  sscanf("010 010 010 010", "%d %i %x %o", &in[0], &in[1], &in[2], &in[3]);
  printf("%d %d %d %d\n", in[0], in[1], in[2], in[3]);
  sscanf("0x10 10 010", "%i %i %i", &in[0], &in[1], &in[2]);
  printf("%d %d %d\n", in[0], in[1], in[2]);

  return 0;
}

Donc, vous ne devez utiliser %i si vous voulez l'entrée de la base de dépendre du préfixe; si l'entrée de la base doivent être fixes, vous devez utiliser %d, %xou %o. En particulier, le fait que l'un des leaders 0 vous met en octal mode peut vous rattraper.

7voto

Juan Mendes Points 31678

http://en.wikipedia.org/wiki/Printf_format_string semble dire que c'est pour la décimale comme je l'avais deviné

d,i

int comme un nombre décimal signé. '% d' et '% i' sont synonymes de sortie, mais sont différents lorsqu'ils sont utilisés avec scanf () pour entrée (utiliser% i interprétera un nombre comme étant hexadécimal s'il est précédé de 0x et octal s'il est précédé de 0).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X