Le deuxieme parametre de printf

doumbia.danse Messages postés 46 Date d'inscription   Statut Membre Dernière intervention   -  
doumbia.danse Messages postés 46 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   49
 
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   Statut Membre Dernière intervention  
 
Merci beaucoup Sambia39 , c'est exactement ce que je cherchais.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention  
 
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