Que signifient %s et % d dans printf dans le langage C? [fermé]

Je ne comprends pas ce que font les %s et d% dans ce code C:

for (i=0;i<sizeof(code)/sizeof(char*); i++) {
    printf("%s%d%s%dn", "Length of String ", i, " is ", strlen(code[i]));
    str = code[i];
    printf("%s%d%s%cn","The first character in string ", i, " is ", str[0]);
}

Je suis nouveau dans le langage C et mon arrière-plan est en Java.

  • que désignent les symboles %s%d%s%d?
  • Pourquoi y en a-t-il tant?
  • la virgule est-elle utilisée ici pour la concaténation au lieu d'un +?
21
demandé sur M. A. Kishawy 2012-01-27 03:24:32

9 réponses

La famille de fonctions printf() utilise le caractère % comme espace réservé. Quand un % est rencontré, printf lit les caractères suivant le % pour déterminer ce qu'il faut faire:

%s - Take the next argument and print it as a string
%d - Take the next argument and print it as an int

Voir cet article de Wikipedia pour une belle image: chaîne de format printf

Le \n à la fin de la chaîne est pour un caractère retour à la ligne/retour chariot.

48
répondu iccir 2012-01-26 23:29:05

% notation est appelé un spécificateur de format. Par exemple, %d indique à printf() d'imprimer un entier. % s pour imprimer une chaîne (char *), etc. Vous devriez vraiment le regarder ici: http://google.com/search?q=printf + format + spécificateurs

Non, les virgules ne sont pas utilisées pour la concaténation de chaînes. Les virgules servent à séparer les arguments passés à une fonction.

3
répondu 2012-01-26 23:28:16

Le premier argument indique des espaces réservés pour les variables / paramètres qui suivent.
Par exemple, %s indique que vous vous attendez à ce qu'un String soit votre premier paramètre d'impression.

Java a aussi un printf, ce qui est très similaire.

3
répondu rtheunissen 2012-01-26 23:28:30

%D est imprimé en tant qu'int %s est imprimé sous forme de chaîne %f est imprimé en virgule flottante

, Il convient de noter qu'il est inexact de dire que c'est différent de Java. Printf signifie print format, si vous faites une impression formatée en Java, c'est exactement la même utilisation. Cela peut vous permettre de résoudre des problèmes intéressants et nouveaux en C et Java!

2
répondu Irony 2012-01-27 00:04:54

Le premier argument de printf est une chaîne d'identificateurs.

%s fait référence à une chaîne %d fait référence à un entier %c fait référence à un caractère. Par conséquent: %s%d%S % c \ n imprime la chaîne "le premier caractère de sting ", %d imprime i, %s imprime " is " Et %c imprime str[0].

1
répondu Zyerah 2012-01-26 23:29:40

%s est pour la chaîne %d est pour décimal (ou int) %c est pour le caractère

Il semble être en train de mâcher un tableau de caractères et d'Imprimer la chaîne existante à partir de chaque position suivante. Les chaînes s'arrêteront à la première valeur nulle dans chaque cas.

Les virgules sont juste séparer les arguments d'une fonction qui prend un nombre variable d'arguments; ce nombre correspond au nombre de % args dans le descripteur de format à l'avant.

1
répondu Rayfleck 2012-01-26 23:29:41

"%s%d%s%d\n" est la chaîne de format; il indique à la fonction printf Comment formater et afficher la sortie. Tout ce qui est dans la chaîne de format qui n'a pas de % immédiatement devant est affiché tel quel.

%s et {[4] } sont des spécificateurs de conversion; ils indiquent à printf Comment interpréter les arguments restants. %s indique à printf que l'argument correspondant doit être traité comme une chaîne (en C, une séquence terminée à 0 de char); le type de l'argument correspondant doit être char *. %d dit printf que l'argument est traité comme un entier de valeur; le type de l'argument correspondant doit être int. Puisque vous venez d'un arrière-plan Java, il est important de noter que printf (comme les autres fonctions variadiques) s'appuie sur Vous pour lui dire quels sont les types des arguments restants. Si la chaîne de format était "%d%s%d%s\n", printf tenterait de traiter "Length of string" comme une valeur entière et i comme une chaîne, avec des résultats tragiques.

1
répondu John Bode 2012-01-26 23:54:06

%(lettre) indique le type de format du texte de remplacement. %s spécifie une chaîne, %d un entier et %c un caractère.

0
répondu 3Pi 2012-01-26 23:29:46

%s%d%S%D\n est une chaîne de format. Il est utilisé pour spécifier comment les informations sont formatées sur une sortie. ici, la chaîne de format est censée imprimer une chaîne suivie d'un chiffre suivi d'une chaîne, puis à nouveau un chiffre. Le dernier symbole \n représente le retour chariot qui marque la fin d'une ligne. En C, les chaînes ne peuvent pas être concaténées par + ou, bien que vous puissiez combiner différentes sorties sur une seule ligne en utilisant les chaînes de format appropriées (l'utilisation de chaînes de format consiste à formater la sortie info.).

0
répondu sidharth sharma 2012-01-26 23:33:36