Quelle est la différence entre %d et %*d en langage c?
Qu'est-ce que %*d
? Je sais que %d
est utilisé pour integers
, donc je pense que %*d
doit également liées à l'entier uniquement? Quel est l'objectif? Que faut-il faire?
int a=10,b=20;
printf("\n%d%d",a,b);
printf("\n%*d%*d",a,b);
Résultat est
10 20
1775 1775
Ressemble à un spécificateur de largeur: cplusplus.com/reference/clibrary/cstdio/printf
Vous devriez écrire que comme une réponse..
c'est juste un lien qui n'est pas admissible à titre de réponse. Je suis trop paresseux pour étendre sur elle...
nice bas de vote.. une raison en particulier ?
Pour les downvotes, être justifiée par des "cette question n'est pas de montrer tout l'effort de la recherche ...", mais j'ai tendance à couper les débutants un peu de mou mais, à la différence de guga, je me sens trop indifférent ce matin pour poster un renversement de vote :-). Ce dernier
Vous devriez écrire que comme une réponse..
c'est juste un lien qui n'est pas admissible à titre de réponse. Je suis trop paresseux pour étendre sur elle...
nice bas de vote.. une raison en particulier ?
Pour les downvotes, être justifiée par des "cette question n'est pas de montrer tout l'effort de la recherche ...", mais j'ai tendance à couper les débutants un peu de mou mais, à la différence de guga, je me sens trop indifférent ce matin pour poster un renversement de vote :-). Ce dernier
printf
par la façon dont est un comportement indéterminé, car tu dois passer quatre arguments.
OriginalL'auteur Parag | 2012-03-30
Vous devez vous connecter pour publier un commentaire.
La
%*d
dans unprintf
vous permet d'utiliser un variable pour contrôler la largeur de champ, le long des lignes de:qui vous donnera:
(avec chacun de ces
.
les caractères d'un espace). Le*
consomme un argumentwid
et lad
consomme le42
.La forme que vous avez, comme:
est un comportement indéterminé, conformément à la norme, puisque vous devez fournir quatre arguments après la chaîne de format, pas de deux (et la bonne compilateurs comme
gcc
vais vous dire à ce sujet si vous augmentez le niveau d'avertissement). DeC11 7.20.6 Formatted input/output functions
:Il devrait être quelque chose comme:
Et la raison pour laquelle vous obtenez le bizarre de sortie est en raison de ce comportement indéfini. Cette excellente réponse vous montre le genre de choses qui peuvent mal se passer (et pourquoi) quand vous ne suivez pas les règles, en particulier concernant cette situation.
Maintenant, je ne vous attendez pas à un désalignement de la question depuis que vous utilisez
int
pour tous les types de données, mais, comme avec tous les comportements indéfinis, rien peut arriver.OriginalL'auteur paxdiablo
Lorsqu'il est utilisé avec scanf (), cela signifie qu'un nombre entier est analysée, mais le résultat n'est pas stocké n'importe où.
Lorsqu'il est utilisé avec printf (), cela signifie que la largeur de l'argument est spécifié par le prochain argument de format.
OriginalL'auteur Jonathan Wood
L' * est utilisé comme une indication que la largeur est passé comme un paramètre de printf
printf est une variable en argument de la fonction, de sorte que lorsque la chaîne de format est analysé, il recherche pour un entier représentant la largeur de la première valeur, la valeur elle-même, la largeur de la deuxième valeur et la deuxième valeur. Parce que vous êtes seulement de passage 2 valeurs, les valeurs utilisées sont indéfinis. Essayez à l'aide de 4 valeurs significatives et voir le résultat.
OriginalL'auteur guga