Le deuxieme parametre de printf

Fermé
doumbia.danse Messages postés 46 Date d'inscription jeudi 3 juillet 2014 Statut Membre Dernière intervention 16 mars 2015 - 15 nov. 2014 à 01:44
doumbia.danse Messages postés 46 Date d'inscription jeudi 3 juillet 2014 Statut Membre Dernière intervention 16 mars 2015 - 15 nov. 2014 à 21:55
Bonsoir,

Au fait j'arrive pas à bien comprendre la signification du deuxième paramètre la fonction
printf
, bien sûr je parle de ce symbole
...
,
A voir également:

3 réponses

sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
Modifié par sambia39 le 15/11/2014 à 20:07
Bonsoir je vais reprendre ce que @KX à dit dans son dernier poste pour l'approfondir, ses fonctions sont appelé "fonction à nombre d'arguments variables" et la majeure partie de ces variables je ne parle pas forcément de
printf()
utilise une / des macro qui est va_start pour affecter un pointeur X vers le tout premier argument de la pile et va_end pour terminer en gros lorsque le traitement de cette pile est finie.
Sans rentré plus en détail sur chaque fonction je t'invite a consulté le manuel de stdarg.hsur les instruction
 va_list, va_arg, va_start etc.. 

bref un exemple sera mieux qu'un long discours
Attention le code est un exemple
à bientôt

#include <stdio.h>
#include <stdarg.h>

/**
* Attention dans cette exemple j'utilise
* printf & c'est un choix volentaire
* le code est pas optimiser attention
**/
void f_ExempleAvancer( char *pStr, ... ){

 va_list List;    //Liste
 va_start( List, pStr );

 while( *pStr ){

  if( *pStr == '%' ){
   switch( *(++pStr) ){
    case 's' :
     printf( "Chaîne \t\t: %s\n", (char*)va_arg(List,char*) );
    break;

    case 'd':
     printf( "Entier / Operation\t: %d\n", (int)va_arg(List, int) );
    break;

    case 'f':
     printf( "Double / Operation\t: %f\n", (float)va_arg(List, double));
    break;

    default:
     perror( "format inconnu\n" );
    break;
   }
  }
  pStr++;
 }
 va_end(List);
}

//Fonction principale
int main( void ){

 //Teste de la Fonction Avancer
 f_ExempleAvancer("%s\t,%s \n", "@KX est ", "Modérateur");
 f_ExempleAvancer("%s %s  %d %f \n", "Bonjour", "@sambia39", 2+2, 10/5.2);
 return ( 0 );
}



Toute connaissance est une réponse à une question.
5
doumbia.danse Messages postés 46 Date d'inscription jeudi 3 juillet 2014 Statut Membre Dernière intervention 16 mars 2015
15 nov. 2014 à 21:55
Merci beaucoup Sambia39 , c'est exactement ce que je cherchais.
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
15 nov. 2014 à 04:39
Bonjour,

Ça veut dire que tu peux mettre 0 paramètre, 1 paramètre ou plusieurs paramètres. Cela va dépendre du nombre de pattern que tu vas mettre dans le premier paramètre. Exemples :

printf("Hello World! ");
printf("Hello %s !", "World");
printf("%s %s !", "Hello", "World");
1
doumbia.danse Messages postés 46 Date d'inscription jeudi 3 juillet 2014 Statut Membre Dernière intervention 16 mars 2015
15 nov. 2014 à 13:01
je sais leur rôle mais c'est plutôt le type même que je veux connaitre, comme par exemple le premier c'est
const char* 
, et c'est maintenant le type du second que je veux savoir , puisque j'aimerais créer une fonction qui prend en premier paramètre un
int a
, en deuxième
 const char *chaine 
et en troisième un type non fixe ça peut être un
int 
ou
char 
ou
char * 
etc
0