Le deuxieme parametre de printf

doumbia.danse Messages postés 52 Statut Membre -  
doumbia.danse Messages postés 52 Statut Membre -
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
...
,

3 réponses

  1. sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   50
     
    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
    1. doumbia.danse Messages postés 52 Statut Membre
       
      Merci beaucoup Sambia39 , c'est exactement ce que je cherchais.
      0
  2. KX Messages postés 19031 Statut Modérateur 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
  3. doumbia.danse Messages postés 52 Statut Membre
     
    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