web-dev-qa-db-fra.com

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

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

74
clementine

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

Dans printf(), vous pouvez utiliser %i Comme synonyme de %d, Si vous préférez indiquer "entier" au lieu de "décimal", mais %d est généralement préféré car il est plus spécifique.

Lors de la saisie, en utilisant scanf(), vous pouvez également utiliser %i Et %d. %i Signifie l’analyser comme un entier dans n’importe quelle base (octal, hexadécimale ou décimale, comme indiqué par un préfixe 0 Ou 0x), Tandis que %d signifie l’analyser comme un entier décimal.

Voici un exemple de tous 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 devriez utiliser %i Que si vous voulez que la base d’entrée dépende du préfixe; si la base d'entrée doit être corrigée, vous devez utiliser %d, %x ou %o. En particulier, le fait qu'un 0 À la tête vous mette en mode octal peut vous rattraper.

94
Brian Campbell

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

7
Juan Mendes